本帖最后由 jackz007 于 2022-9-16 15:44 编辑
我也写了一个和你一模一样的代码,这是在我这边用调试器看到的代码样子00401350 /$ 55 push ebp
00401351 |. 89E5 mov ebp, esp
00401353 |. 83E4 F0 and esp, FFFFFFF0
00401356 |. 83EC 20 sub esp, 20 ; 在堆栈中开辟出 0x20 字节空间供局部变量使用
00401359 |. E8 F2050000 call 00401950
0040135E |. C74424 1C 09000000 mov dword ptr [esp+1C], 9 ; <--- a = 9
00401366 |. C74424 18 09000000 mov dword ptr [esp+18], 9 ; <--- b = 9
0040136E |. C74424 14 00000000 mov dword ptr [esp+14], 0 ; <--- c = 0
00401376 |. 8B5424 1C mov edx, dword ptr [esp+1C] ; <--- edx = a
0040137A |. 8B4424 18 mov eax, dword ptr [esp+18] ; <--- eax = b
0040137E |. 01D0 add eax, edx ; eax = b + a
00401380 |. 894424 14 mov dword ptr [esp+14], eax ; <--- c = eax
00401384 |. C70424 24304000 mov dword ptr [esp], 00403024 ; |ASCII "pause"
0040138B |. E8 30080000 call <jmp.&msvcrt.system> ; \system
00401390 |. B8 00000000 mov eax, 0 ; eax = 0 就是 return 0 中的那个 0
00401395 |. C9 leave
00401396 \. C3 retn
00401397 90 nop
你的反汇编代码采用了 AT&T 风格,我这个采用的是 Intel 风格,二者虽然在指令文本形式上存在不同,但是,机器指令本身并无本质的差别。
|