当前位置: 代码迷 >> 汇编语言 >> 关于call和堆栈两个有关问题
  详细解决方案

关于call和堆栈两个有关问题

热度:171   发布时间:2016-05-02 04:24:07.0
【求助】关于call和堆栈两个问题
1. call问题
;此处省略头

.code
push 0
push offset szCap
push offset szText
push 0
call dword ptr [offset MessageBox]

;此处省略尾


调试发现,本应该是push 0是句柄,但是之后又添加了一个push cs?? 为何?

2. 堆栈问题
stack segment
db 8 dup (?)
stack ends
...
code segment
...
mov ax, stack
mov ss, ax
mov sp, 10H


Debug一下,查看SS:SP发现里边保存了ax等好几个寄存器的值,为何?加载过程是?



------解决思路----------------------
1. 可能是你的 call dword ptr [MessageBox] 的写法被汇编程序误解了吧,应该是写成 call MessageBox 的,如下面的 call ExitProcess 似的,因为 MessageBox 就是系统函数的入口,不是另外个变量保存了这个函数入口的地址;不过误解成这样,也属异常,不大好理解,甚至可能是 masm 的 bug 了。
2. 这几个,应该是debug 的 t 单步功能使用了的吧,除了触发中断的那三个 word 之外,其它的就看 debug 的单步功能代码部分怎么做的了,究竟是 ax 还是 ss 其实都没什么关系;对规范的堆栈使用来说,低于 sp 的区间是不可靠的,可信任的只是 sp 指向的后面的部分(bug 除外)。
  相关解决方案