WEB开发网
开发学院软件开发C++ Call Stack简介 阅读

Call Stack简介

 2010-11-04 08:44:04 来源:WEB开发网   
核心提示:观察此时的栈情况,首先ESP = 002AF950然后看memory窗口最下面一行显示0x200已经入栈了,Call Stack简介(4),表示为一个DWORD类型的00 02 00 00,继续按F10,加8即代表回到了原来的地址,如果是1个参数,ESP = 002AF94C然后看Memory窗口第二个参数0x100也

观察此时的栈情况,首先ESP = 002AF950

然后看memory窗口

clip_image015

最下面一行显示0x200已经入栈了,表示为一个DWORD类型的00 02 00 00。

继续按F10,ESP = 002AF94C

然后看Memory窗口

clip_image016

第二个参数0x100也已经入栈了,表示为一个DWORD类型的00 01 00 00。

这时要注意,代码运行到了func call的地方。

clip_image017

在这里,我们要按F11,同时记住当前的ESP是002AF94C,该call下一行要执行的代码是add esp, 8,地址是0103146D。

按F11进入到call中后,首先观察寄存器的情况:ESP = 002AF948

ESP又减少了4,为什么?我们要观察Memory窗口

clip_image018

当前ESP指向的地址是什么?就是上面的add esp,8的地址。

所以在当前环境下,我们可以总结出:

· 右面参数入栈

· 左面参数入栈

· 返回地址入栈

(这个与call方式有关,我们在下一篇文章中再谈)

上面的add esp,8 代表什么?因为我们push了两个参数,共占用了栈的8个字节,所以我们需要恢复栈的原始状态。加8即代表回到了原来的地址。如果是1个参数,则就是加4了。

Prologue的说明

clip_image019

上一页  1 2 3 4 5  下一页

Tags:Call Stack 简介

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接