Я написал простую программу на 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, то такой дополнительный код не прилагается.