2016-06-05 5 views
1

Я пытаюсь анализировать динамически связаны 64-битный ELF-файл с помощью IDA Pro, и я нахожу сегмент с extern Tpye, который сразу же после .bss, как следуетЧто означает «Тип сегмента: Externs» в IDA?

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 

Однако, когда я отлаживать его во время выполнения с помощью gdb, я считаю, что этот сегмент «extern» содержит ТОЛЬКО ZERO! В этом сегменте нет никаких достоверных данных, кроме нуля. Кроме того, нет описаний о разрешениях этого сегмента, похоже, что этот сегмент даже не существует.

Поскольку DATA XREF в GOT, возможно, он имеет какое-то отношение к функциям импорта? Но я не мог найти соответствующие документы, интересно, как IDA это узнает, и что это такое?

Спасибо!

ответ

2

extern не является реальным сегментом. Это псевдосегмент, созданный IDA для представления символов с неизвестными адресами в других модулях; GOT обычно содержит указатели на них. Во время отладки он, вероятно, покрывается областью .bss или стека, очищенной загрузчиком ОС, поэтому вы видите нули.

0

extern в контексте IDA немного отличается от контекста C/C++.

В C/C++, то extern ключевое слово используется для объявить переменной/функции/объект, который на самом деле не определен в текущем объекте, но будет доступен к тому времени, двоичный файл связан. Это происходит, когда вы определяете массив в одном .c файле и получаете доступ к нему в нескольких файлах, например.

В контексте IDA раздел externs используется для описания области памяти, определяющей API-файлы из .so/.dll-файлов. Обычно это IAT в PE и GOT в файле ELF. Когда объект в секции externs имеет имя известного API, IDA автоматически окрашивает его в розовый цвет и добавляет прототип, если он доступен.

 Смежные вопросы

  • Нет связанных вопросов^_^