Jeśli funkcja biblioteki przypomina np. malloc
został ponownie zaimplementowany, następnie są dwa symbole o tej nazwie, jeden w pliku obiektu lokalnego i jeden w bibliotece systemowej. Którego z nich używa się, gdy funkcja z np. stdio
jest używany, który wywołuje malloc
(i dlaczego)?Jeśli zostanie ponownie zaimplementowana standardowa funkcja biblioteki, która z tych dwóch nazw jest wywoływana?
Odpowiedz
Zachowanie link jest w sposób ogólny:
- Uwzględnij wszystkie symbole zdefiniowane w plikach obiektowych.
- Następnie usuń niezdefiniowane obiekty za pomocą obiektów w bibliotekach.
Tak więc, jeśli malloc zostanie ponownie zaimplementowany i połączony jako plik obiektowy, wersja w pliku obiektowym zastąpi wersję w standardowych bibliotekach. Jeśli jednak nowe malloc jest połączone jako biblioteka, zależy to od kolejności łączenia bibliotek.
inny sposób, biorąc pod uwagę GNU BINUTILS jak zakres, aby zastąpić funkcji bibliotecznych jest zawinąć funkcję używając --wrap parametr: https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html
za pomocą opcji --wrap ld możemy dostać obie funkcje i powiązany funkcja owijki mogłaby wywołać zawiniętą.
Kolejność łączenia zależy również od kolejności parametrów wiersza poleceń. Rozważam tutaj, że biblioteki są wymienione po obiektach, ponieważ generalnie nie ma sensu umieszczać bibliotek przed obiektami, ponieważ ich celem jest dostarczenie brakujących symboli wymaganych przez te biblioteki.
Jedną z odpowiedzi jest to, że wpadasz w okropne kłopoty, próbując zastąpić malloc. Nie idź tam. Nawet o tym nie myśl. Zwłaszcza jeśli chcesz zadawać pytania na temat stackoverflow, nawet o tym nie myśl.
Inną odpowiedzią jest to, że wywołujesz niezdefiniowane zachowanie, a prawdopodobnym rezultatem jest wywołanie funkcji malloc, która najbardziej Cię skrzywdzi. Jeśli masz szczęście, podczas rozwoju. Jeśli masz mniej szczęścia, gdy Twój kod znajdzie się w rękach klientów. Nie rób tego.
Pisanie otoków wokół malloc z nowymi nazwami jest wystarczająco złe. Próba zastąpienia malloc jest szaleństwem.
Niestety, nie ma prawdziwego wyboru. Narzędzie do przeniesienia używa 'sbrk' * i * standardowych funkcji bibliotecznych. To nie działa na dzisiejszych systemach. Tak więc albo sbrk jest zastępowany (oznacza przepisanie znacznej części kodu narzędzi), albo dostarczany jest lokalny malloc, który nie używa 'sbrk'. Problem pozostaje: lokalny malloc nie działa z ASAN, nawet jeśli ten lokalny malloc wydaje się być poprawny. Obecnie nie jest jasne, dlaczego nie działa z ASAN. – user3224237
- 1. Która z tych dwóch funkcji jest bardziej "pythonic"?
- 2. Funkcja DialogFragment zgłasza wyjątek ClassCastException, jeśli wywoływana jest z fragmentu
- 3. Funkcja odbicia zaimplementowana z obietnicami
- 4. Krojenie kawałek z wykorzystaniem biblioteki standardowa
- 5. Funkcja OpenCV SURF nie jest zaimplementowana
- 6. Funkcja onStop jest wywoływana przed onStart
- 7. Funkcja wywołania zwrotnego Asio nie jest wywoływana
- 8. Jaki jest sens tych warunków jeśli (0)?
- 9. Funkcja onContextItemSelected nie jest wywoływana w DialogFragment
- 10. Dlaczego funkcja __init__ nie jest wywoływana, jeśli funkcja __new__ została wywołana bez argumentów:
- 11. Funkcja zdarzeń iOS 6 js nie jest wywoływana, jeśli ma ona wartość setTimeout
- 12. Uruchomić aplikację AlarmManager, jeśli urządzenie zostanie ponownie uruchomione.
- 13. Dlaczego funkcja run() jest wywoływana tylko raz?
- 14. Dlaczego funkcja onBackPressed() nie jest wywoływana?
- 15. Czy standardowa biblioteka Pythona jest naprawdę standardowa?
- 16. Sprawdź, czy funkcja jest w języku C lub Lua zaimplementowana
- 17. Funkcja sukcesu AJAX nie jest wywoływana
- 18. Co się stanie, jeśli kompilator wstawi funkcję, która jest wywoływana przez wskaźnik funkcji
- 19. Dlaczego funkcja onKey() jest wywoływana dwa razy?
- 20. Dlaczego nie jest wywoływana funkcja textFieldShouldReturn?
- 21. Funkcja Progu libcURL nie jest wywoływana
- 22. W jaki sposób zaimplementowana jest trwała funkcja JVM w ciastku?
- 23. onTouchEvent() nie zostanie uruchomiony, jeżeli setSystemUiVisibility (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) jest wywoływana
- 24. W ReactNative, która metoda Async Await jest lepsza w tych dwóch przypadkach i dlaczego?
- 25. Funkcja z jednej biblioteki dopasowanej do szablonu z innej biblioteki
- 26. Klasa GAD_GTMStringEncoding jest zaimplementowana w obu <framework> i <app>. Jeden z dwóch będzie użyty. Która z nich jest niezdefiniowana?
- 27. accessoryButtonTappedForRowWithIndexPath: nie jest wywoływana.
- 28. Nieoczekiwany przeciążenie wywoływana, gdy funkcja jest wywoływana z zmiennej liczbie argumentów szablonu konkretyzacji
- 29. UNUserNotificationCenter didRecieve Odpowiedź nie jest wywoływana, jeśli aplikacja została zakończona
- 30. Funkcja JQuery nie jest wywoływana przy ukrytym pliku kontroli
Tradycyjny model polega na tym, że moduły i biblioteki później w kolejności łączenia zastępują wcześniejsze, zastępując 'malloc' nawet dla wewnętrznych odniesień. Oczywiście mogą występować komplikacje, takie jak oblanie makr, dodawanie informacji o śledzeniu lub stosowanie wewnętrznych wariantów dostarczających dodatkowych wskazówek do alokatora. – doynax
Jeśli zrozumiem to prawo, oznaczałoby to, że zwykle używany jest symbol biblioteki systemowej. Ale testy pokazują, że zamiast tego używana jest funkcja lokalna (reimplementation). – user3224237
Jest odwrotnie. Pliki obiektowe są połączone w ostatnio poprzedzone bibliotekami w porządku listy. – doynax