Я написал простую программу на 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.
Хорошо, вот объяснение (кому угодно): этот код был построен в режиме отладки и поэтому ассемблер/ linker (точно не знаю, какие именно) добавляет эти дополнительные байты.JMP существует для того, чтобы программа могла работать, потому что она должна обходить серию инструкций INT 3.Если программа была построена в режиме RELEASE, такой дополнительный код не добавляется.