Внесение исправлений в исполняемый файл, скомпилированный с помощью MASM.

Я написал простую программу на MASM, например:

.386
.model flat, stdcall
option casemap:none

.data
szName db "MASM", 0

.code
start:
mov eax, DWORD PTR [szName]
ret
end start

Я проверяю код в отладчике OllyDbg и получаю:

CPU Disasm
Address   Hex dump          Command                                  Comments
00401004      CC            INT3
00401005  /.  E9 06000000   JMP 00401010
0040100A  |   CC            INT3
0040100B  |   CC            INT3
0040100C  |   CC            INT3
0040100D  |   CC            INT3
0040100E  |   CC            INT3
0040100F  |   CC            INT3
00401010  |>  A1 00404000   MOV EAX,DWORD PTR DS:[404000]            ; ASCII "MASM"
00401015  \.  C3            RETN
00401016      A1            DB A1

Мой вопрос: какой компонент исправляет эти 11 байтов (00401005-0040100F) перед фактическим кодом (00401010)? И почему?

Я использую Windows XP SP3, MASM и OllyDbg.

Хорошо, вот объяснение (кому интересно): Этот код был построен в режиме DEBUG, поэтому ассемблер/компоновщик (точно не знаю какой) добавляет эти дополнительные байты. JMP существует для того, чтобы программа могла работать, потому что она должна обходить последовательность инструкций INT 3. Если программа была собрана в режиме RELEASE, то такой дополнительный код не прилагается.


person Ponty    schedule 07.04.2011    source источник


Ответы (1)


Я думаю, что это просто байты выравнивания, поэтому код выравнивается по границе 16 байт и работает немного быстрее.

person BlackBear    schedule 07.04.2011
comment
хорошо, скажем, что для выравнивания используется серия инструкций INT3, но почему инструкция JMP? - person Ponty; 07.04.2011
comment
@Понти: без понятия. Возможно, masm разместил эти int3 для своего отладчика/инструментов. - person BlackBear; 07.04.2011
comment
хорошо, я понял, что я собираю для отладки, а не для выпуска, и поэтому я получил эти дополнительные 11 байтов перед фактическим кодом. Но все еще не получите инструкцию JMP... - person Ponty; 07.04.2011