Ich schreibe einen Userland Elf Loader als Nebenprojekt, um mehr über ELF-Dateien und ihre Funktionsweise zu erfahren. Ich frage mich, wo ich die Adresse zum Laden eines Symbols aus einer dynamischen Bibliothek (libc.so.6
) bekommen kann. Wenn ich das Programm zerlegen erhalte ich:Woher kommt die Adresse eines dynamischen Symbols?
$objdump -d test | grep puts
400420: ff 25 f2 0b 20 00 jmpq *0x200bf2(%rip) # 601018 <[email protected]_2.2.5>
0x200bf2
die Adresse, wo die Funktion geht, aber wo bekomme ich es?
EDIT: Ich bitte um, wo es nicht geladen wird, wo es definiert ist, so ist st_value
irrelevant
Welche Eintrag auf der Symboltabelle enthält die Adresse? –
@ ZachS, die Symboltabelle ist ein Array von 'Elf32_Sym' und/oder' Elf64_Sym' Strukturen. Die Adresse der Methode wird dem Member 'st_value' der Struktur zugewiesen. Eine Verknüpfung zum Symboltabellenformat als Referenz hinzugefügt. –
Es ist in der Datei nicht definiert, da es ein dynamisches Symbol ist, ich habe den st_value für wo es definiert ist (in libc.so.6) Ich frage mich, wie ich die Adresse bekommen kann, wo sie geladen wird. st_value für dynamische/undefinierte Symbole ist Null, was falsch ist –