dumpbin
Visual Studio утилита может быть использована с параметром /HEADERS
, чтобы просмотреть все заголовки разделов. Часть продукции вы можете быть заинтересованы в будет выглядеть примерно так:
SECTION HEADER #1
.text name
1000 virtual size
1000 virtual address (00401000 to 00401FFF)
200 size of raw data
200 file pointer to raw data (00000200 to 000003FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
60000020 flags
Code
Execute Read
Как вы можете видеть, что это дает название как «.text» для секции кода данного конкретного ехе. В этом разделе можно переименовать что-нибудь, пока это соответствует в Microsoft specification:
Для [имена длиннее 8 байт], это поле содержит косую черту (/), что сопровождается ASCII представление десятичного число, которое является смещением в таблице строк. Исполняемые изображения не используют таблицу строк и не поддерживают имена разделов длиной более 8 символов.
Есть способы найти раздел, независимо от его названия.
Для текстовых разделов им потребуется установить по меньшей мере флаг Execute
. И виртуальный адрес раздела .text должен быть таким же, как и точка входа, которая определена в необязательном заголовке.
Раздел импорта (часто называемый .idata) должен иметь свой адрес, заданный во втором элементе массива каталогов, который приходит в конце необязательного заголовка. Опять же, глядя на часть выгрузки самосвала:
2 number of directories
0 [ 0] RVA [size] of Export Directory
2000 [ 0] RVA [size] of Import Directory
В этом случае раздел .idata начинается с виртуального адреса 0x2000. Кроме того, для этого раздела требуется, по крайней мере, флаг Read
.
Раздел .data может быть сложнее отследить. Как и в разделе импорта, он должен иметь как минимум флаг Read
, но чтобы убедиться, что вы можете отсканировать раздел .text для кодов операций, которые перемещают данные на адрес или из адреса. Этот адрес должен находиться в одном из разделов данных, и вы можете найти начало раздела, посмотрев выравнивание раздела в необязательном заголовке.
Например, если вы найдете 68 17 32 40 00
, что соответствует PUSH 0x00403217
, а выравнивание раздела - 0x1000, тогда начало раздела .data может быть 0x3000 (где 0x00400000 - это база изображений).