Wie interpretieren Sie die dynamischen symbol-Tabelle in ein ELF executable?
War ich auf der Suche bei der Interpretation der dynamischen symbol-Tabelle (.dynsym
) eine ausführbare ELF-Datei. Ich konnte erfolgreich interpretiert das symbol Tabelle .symtab
(16 Byte pro Zeichen) mithilfe der value
- Attribut zur Angabe der Adresse des symbols und name
- Attribut zu Kennzeichnen, wird der offset auf den Beginn der Zeichenfolge in .strtab
Abschnitt. Aber ich bin nicht in der Lage zu interpretieren, der dynamisch-symbol-Tabelle (.dynsym
) mit der gleichen Methode. Ich benutzte Ali ' s blog [1] für die Referenz.
Sah ich auf einem anderen blog von Ali [2] aber ich bin nicht verstehen, wie interpretieren Sie die dynamischen symbol-Tabelle unter Verwendung der hash-Tabelle. Klar, es ist nicht die gleiche Zuordnung wie bei der symbol-Tabelle. Wie soll ich das verstehen das dynamische symbol-Tabelle (.dynsym)?
Auch, die ELF executable, die ich bin Betrachtung ist in zwei Abschnitte unterteilt, nämlich .hash
und .gnu.hash
. In welcher Abteilung muss ich finden für die hash-Werte?
[1] http://blogs.oracle.com/ali/entry/inside_elf_symbol_tables
[2] http://blogs.oracle.com/ali/entry/gnu_hash_elf_sections
- Okay, ich habe gewartet, für einen Tag für einen Kommentar/Antwort, aber ich habe nicht jede. Was soll ich daraus schließen? :-/
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom ELF-Spezifikation, jedes symbol ist definiert mit dem folgenden Struktur:
So, in der Regel werden 16 bytes. Die dynamische und die statische symbol-Tabelle die gleiche Struktur, so dass das Parsen dieser Tabelle ist genau die gleiche, die für die statische und verknüpfen. Natürlich ist die Bedeutung der Werte sind nicht immer die gleichen.
Erreichen Sie ein symbol in der symbol-Tabelle durch zwei Mittel. Erstens, wenn Sie bereits wissen, die symbol-index-Sie können gehen Sie einfach auf diesen index. Aber einige Male, die Sie nicht über das symbol, index, haben Sie nur ein symbol-Namen und in der Tat Sie wollen, überprüfen Sie, ob das symbol Tabelle eine definition für ein symbol mit diesem Namen. In dieser zweiten situation, die Sie verwenden der hash-Abschnitte. Diese werden verwendet, um schnell überprüfen, ob ein symbol in einer symbol-Tabelle:
symbol-name
->hash
->symb_index
-> prüfen Sie, obsymbol_table[symb_index] == symbol-name
.Würden Sie brauchen, um für die Saiten in die
.dynstr
Abschnitt.Es würde davon abhängen, die Art von symbol, das Sie möchten, zu suchen. Von dem was ich weiß,
GNU-Stil hash-Tabellen enthalten nur Informationen, die relevant für dynamic linking.
Siehe auch: Jakub Jelinek ist Beschreibung von GNU hash-Tabellen, geschrieben auf dem GNU binutils-mailing-Liste.