Assembly 将代码修补到MASM编译的可执行文件中

Assembly 将代码修补到MASM编译的可执行文件中,assembly,windows-xp,disassembly,masm32,ollydbg,Assembly,Windows Xp,Disassembly,Masm32,Ollydbg,我用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

我用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?为什么

我使用WindowsXPSP3、MASM和OllyDbg


好的,下面是对关心的人的解释:这段代码是在调试模式下构建的,因此汇编器/链接器不知道到底是哪个添加了这些额外的字节。JMP的存在是为了让程序能够运行,因为它必须绕过INT3指令系列。如果程序是在发布模式下构建的,那么就不会附加这样的额外代码。

我认为它们只是对齐字节,因此代码在16字节边界上对齐,运行速度稍快。

好吧,让我们假设对齐的是一系列INT3指令,但为什么是JMP指令?@Ponty:不知道。也许masm将这些int3放在了它的调试器/工具上,我发现我是为调试而不是发布而构建的,这就是为什么我在实际代码前面多了11个字节。但是仍然没有得到JMP指令。。。