Получение символа раздела

SECTION HEADER #5
.text name
0 physical address
0 virtual address
24 size of raw data
1B78 file pointer to raw data (00001B78 to 00001B9B)
1B9C file pointer to relocation table
0 file pointer to line numbers
2 number of relocations
0 number of line numbers
60101020 flags
Code
COMDAT; sym= __setdefaultprecision
1 byte align
Execute Read

Я посмотрел документацию COFF и не мог понять, как получить символ раздела (__setdefaultprecision), У меня есть указатель на таблицу символов, таблицу строк и массив разделов, но как узнать символ каждого раздела? Любая помощь приветствуется.

0

Решение

Для разделов COMDAT первые две записи в таблице символов с номером раздела раздела COMDAT содержат название раздела и символ COMDAT. Первый символ дает название раздела, который в вашем примере будет .text, Вторая запись содержит символ COMDAT с именем __setdefaultprecision в вашем примере.

От Спецификация формата исполняемого файла Microsoft Common и формата общего объекта, редакция 8.3:

Разделы COMDAT (только для объектов)

Первый символ, который имеет значение раздела раздела COMDAT, должен
быть символом раздела. […] Второй символ называется «символ COMDAT»
и используется компоновщиком совместно с полем выбора.

Если вы используете DUMPBIN /SYMBOLS на .OBJ, который вы изучали, вы должны увидеть две записи, примерно такие:

00A 00000000 SECT5  notype       Static       | .text
Section length    C, #relocs    1, #linenums    0, checksum A2F45556, selection    2 (pick any)
...
00E 00000000 SECT5  notype ()    External     | __setdefaultprecision

Обратите внимание, что они не обязательно будут последовательными, но они будут первыми двумя SECT5 символы в таблице.

0

Другие решения