将代码修补到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
我的问题是哪个组件在实际代码(00401010)之前修补了这11个字节(00401005-0040100F)?为什么? 我使用Windows XP SP3,MASM和OllyDbg。 好的,这里是解释(对于任何关心的人):这段代码是以DEBUG模式构建的,因此汇编器/链接器(不确切知道哪些)添加了这些额外的字节。 JMP就在那里,以便程序能够运行,因为它必须绕过一系列INT 3指令。如果程序是在RELEASE模式下构建的,则不会附加这样的额外代码。     
已邀请:
我认为它们只是对齐字节,所以代码在16字节边界上对齐,运行速度稍快。     

要回复问题请先登录注册