win32汇编 的 call ret 的实现为何在栈中找不到a ?
1.在8086汇编中 call 用debug查看代码,都可以看到栈中push ip,为何用od反汇编,栈中却看不到call调用子程序时压入栈的ip(如何才能看到?)2.在子程序中,用随便push 几次,用od查看依然看不到栈中有数据被压栈,更奇怪的是不用pop照样可以正确返回(只有传递参数才会看到压栈数据) 纠结啊,比如:
pproca,b
push ebx
push ebx
push ecx
ret
endp
:start
invoke p 1,2
invoke ExitProcess,0
end start
(如何能看到上面3个push 和 invoke中call的ip压栈)
;P那是因为不同的压参方式
你的程序首部应该 写了
.386
.model flat,stdcall
这样就说明你的程序是以stdcall的方式压参数
stdcall是windows api的压参数方式--这样恢复堆栈的代码由你调用的函数来恢复
另外还有一些压参方式
比如
cdecl
fastcall
thiscall
nakedcall
那么具体的lz 可以去搜索下函数调用约定 :lol :o
. 数据预处理时已经到设置运行后,数据到对应位置了,所以看不到,但是它却在内存中 本帖最后由 linha0 于 2011-12-30 22:13 编辑
http://www.fishc.com/uploads/allimg/110114/1_110114022936_1.gif
在寄存器窗口、堆栈窗口有你所需要的信息
不过,需要你单步调试到当前指令处才能看到
页:
[1]