<<1.1.1 __stdcall调用约定>>
这一节里还有不懂得.下载的add.rar用OD打开后是这样.
00401000 >/$ 6A 04 push 4
00401002 |. 6A 03 push 3
00401004 |. E8 16000000 call 0040101F
.......
0040101F /$ 55 push ebp
00401020 |. 8BEC mov ebp, esp
00401022 |. 83EC 04 sub esp, 4
00401025 |. 8B45 0C mov eax, dword ptr [ebp+C]
00401028 |. 8B5D 08 mov ebx, dword ptr [ebp+8]
0040102B |. 895D FC mov dword ptr [ebp-4], ebx
0040102E |. 0345 FC add eax, dword ptr [ebp-4]
00401031 |. 83C4 04 add esp, 4
00401034 |. 5D pop ebp ; 0012FFF0
00401035 \. C2 0800 retn 8
与这个图和解释有些出入,我可不可以这样理解add.rar堆栈参数的传递?如下:
00401000 >/$ 6A 04 push 4 | 参数y
00401002 |. 6A 03 push 3 | 参数x
00401004 |. E8 16000000 call 0040101F | 调用子程序[add(int x,int y)]
.......
0040101F /$ 55 push ebp | 保护现场原先的EBP指针
00401020 |. 8BEC mov ebp, esp | 设置新的EBP指针,指向栈顶
00401022 |. 83EC 04 sub esp, 4 | 创建局部变量,在堆栈中分配些空间
00401025 |. 8B45 0C mov eax, dword ptr [ebp+C] | 调用参数y
00401028 |. 8B5D 08 mov ebx, dword ptr [ebp+8] | 调用参数x
0040102B |. 895D FC mov dword ptr [ebp-4], ebx | ?
0040102E |. 0345 FC add eax, dword ptr [ebp-4] | ?
00401031 |. 83C4 04 add esp, 4 | 释放局部变量占用的堆栈
00401034 |. 5D pop ebp | 恢复现场的ebp指针
00401035 \. C2 0800 retn 8 | 返回main()
---------------------------------------------------------------------------------------------------------
0040102B |. 895D FC mov dword ptr [ebp-4], ebx | ?
0040102E |. 0345 FC add eax, dword ptr [ebp-4] | ?
这两步是做什么用的了?请各位大侠指教..谢谢啦~~菜鸟一个,问题可能很弱,真的想好好学!教教我啦~~
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)