Adres początkowy można uzyskać za pomocą nazwy funkcji, jak znaleźć adres końcowy funkcji? Zostałem poproszony o to pytanie w wywiadzie:Jak znaleźć adres końcowy funkcji w C progu?
Rozważmy funkcję f(), którą napisałem, przekroczyła sekcję tekstową i rozpoczęła się od napisania sąsiedniej sekcji (sekcji danych). Jak mogę sobie z tym poradzić? Dodał także, że powinienem go obsłużyć za pomocą kodu C. Nie powinienem zobaczyć pliku mapy symboli i uzyskać adresu.
Nie ma standardowego sposobu. Możesz spróbować wpisać adres następnej funkcji w pliku, a następnie odjąć - ale nie ma gwarancji, że zadziała. Na przykład linker może sortować funkcje w kolejności alfabetycznej, może więc zawierać miejsce na inne funkcje lub może dawać rozmiar ujemny. –
Musisz podać architekturę i ABI, inaczej nie uzyskasz przydatnych odpowiedzi. –
"Zadano mi to pytanie w wywiadzie" Podejrzewam, że źle zinterpretowałeś to pytanie, a oni pytali, jak powiedzieć, czy zacząłeś przypadkowo wykonywać dane. Odpowiedź brzmiałaby: "Zapobieganie wykonywaniu danych", inaczej znana jest funkcja sprzętowa do oznaczania pamięci jako nie do wykonania. – Ben