2016-06-05 22 views
1

Ich versuche, eine dynamisch verknüpfte 64-Bit-ELF-Datei mit IDA Pro, und ich finde, ein Segment mit einem extern tpye, die nach den .bss richtig zu analysieren, wieWas bedeutet 'Segmenttyp: Externs' in IDA?

jedoch
extern:00000000006021C0 ; Segment type: Externs 
extern:00000000006021C0 ; extern 
extern:00000000006021C0 ; void free(void *ptr) 
extern:00000000006021C0  extrn free:near  ; DATA XREF: .got.plt:off_602018o 

folge, wenn ich debuggen Sie es zur Laufzeit mit gdb, ich finde, dass dieses "externe" Segment NUR NULL enthält! Es gibt keine gültigen Daten außer Null in diesem Segment. Es gibt auch keine Beschreibungen über die Berechtigungen dieses Segments, es sieht so aus, als ob dieses Segment gar nicht existiert.

Da gibt es DATA XREF in GOT, hat es vielleicht etwas mit Importfunktionen zu tun? Aber ich konnte keine relevanten Dokumente finden, ich frage mich, wie IDA es erkennt und was es genau ist?

Danke!

Antwort

2

extern ist kein echtes Segment. Es ist ein Pseudo-Segment, das von IDA erstellt wurde, um Symbole mit unbekannten Adressen in anderen Modulen darzustellen. Die GOT enthält normalerweise Zeiger auf diese. Während des Debuggens wird es wahrscheinlich von .bss oder dem vom OS Loader gelöschten Stapelbereich abgedeckt, deshalb sehen Sie dort Nullen.

0

extern im Kontext von IDA ist ein bisschen anders als im Kontext von C/C++.

in C/C++ ist das Schlüsselwort externverwendet erklärt eine Variable/Funktion/Objekt, das nicht tatsächlich definiert im aktuellen Objekt ist, wird aber mit der Zeit verfügbar sein, die binären verknüpft ist. Dies ist beispielsweise der Fall, wenn Sie ein Array in einer .c-Datei definieren und auf dieses in mehreren Dateien zugreifen.

Im Kontext von IDA wird der Abschnitt externs verwendet, um einen Speicherbereich zu beschreiben, der APIs aus .so/.dll-Dateien definiert. Dies ist normalerweise die IAT in einer PE und die GOT in einer ELF-Datei. Wenn ein Objekt in einem externen Bereich den Namen einer bekannten API hat, wird IDA dieses automatisch pink färben und den Prototyp hinzufügen, falls verfügbar.