Я прочитал PE and COFF specification, Matt Pietrek's "Peering Inside the PE: A Tour of the Win32 Portable Executable File Format" и "An In-Depth Look into the Win32 Portable Executable File Format", а также несколько других источников по этому вопросу.
Мне удалось прочитать таблицу разделов COFF, а также таблицу символов COFF из объектного файла, сгенерированного MinGW GCC 4.7 (я собирал статическую библиотеку в режиме отладки).
Моя конечная цель - получить доступ ко всем функциям, определенным в данном объектном файле (COFF), и прочитать все байты, составляющие их машинный код.Считать код функции из COFF-файла объекта
Вопрос 1: Как рассчитать начальный адрес одной функции внутри файла COFF? Я полагаю, что мне нужно как-то использовать поле «Значение» в символьной записи в качестве смещения в раздел, указанный в «SectionNumber».
Вопрос 2: Как узнать длину любой заданной функции (сколько байтов мне нужно было бы прочитать)?
Вопрос 3: Согласно PE & спецификации Microsoft, COFF должна быть вспомогательной таблицы символов записи после каждой записи символа, который определяет функцию. Почему в моем объектном файле (извлеченном из файла .a, который был скомпилирован в режиме отладки) из трех определенных функций только один имеет такую вспомогательную запись? И это также полностью заполнено нулями?
Что касается раздела 4.5.1 в спецификации PE/COFF: «Записи символа определения функции сопровождаются дополнительной записью в формате, описанном в следующей таблице». ? – AndiNo
Также говорит: «Запись таблицы символов знаменует начало определения функции, если она имеет все следующее: класс хранения EXTERNAL (2), значение типа, указывающее, что это функция (0x20) и номер раздела, который больше нуля », что заставляет меня думать, что« не у всех функций есть это ». –