Я хочу быть в состоянии выяснить, откуда код, появляющийся в точке входа, взглянув на заголовок PE.
Например, этот фрагмент кода является начальным кодом моей программы (401000h)
00401000 >/$ 58 POP EAX ; kernel32.76E93677
00401001 |. 2D 77360100 SUB EAX,13677
00401006 |. BB 4A184000 MOV EBX,<JMP.&kernel32.VirtualProtect>
Я хочу знать, откуда этот код. Как я могу найти его без ручного сканирования моего файла? (чтобы завершить пример, вот hexdump из того же файла, код теперь находится на 200h)
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000200 58 2D 77 36 01 00 BB 4A 18 40 00
Как мне добраться от моей виртуальной точки входа (401000h) до необработанной точки входа (200h)?
Я пытался решить это сам, конечно. Но я что-то упустил. Сначала я подумал:
.text [Entrypoint (1000h) - VirtualOffset (1000d)] = необработанная точка входа
так как выравнивание файла = 200, а необработанная точка входа была в самом начале моего раздела .text, я подумал, что смогу использовать это для всех исполняемых файлов.
Решено, я допустил глупые ошибки при расчете необработанной точки входа
.text [Точка входа - Виртуальное смещение] + Выравнивание файла = Необработанная точка входа (относительно секции .text)