Call Stack简介
2010-11-04 08:44:04 来源:WEB开发网核心提示:Q: 为什么要ebp-0C0h,而不是其他的数字?A: 看下面一行的30h,Call Stack简介(5),乘以sizeof(DWORD)之后,即是0C0h,因为我们有两个local变量,所以栈预留了8个字节,这段空间包含了参数使用的栈空间、Edit&Continue的空间和编译器对于栈保护的空间,Q: move ax
Q: 为什么要ebp-0C0h,而不是其他的数字?
A: 看下面一行的30h,乘以sizeof(DWORD)之后,即是0C0h。这段空间包含了参数使用的栈空间、Edit&Continue的空间和编译器对于栈保护的空间。
Q: move ax, 0CCCCCCCCh什么意思?
A: CC代表了int 3。所以上述代码实际上是填充了0C0h个int3在该栈空间内。如果代码“不小心”运行到了这里,则会立刻中断。
Edit & Continue
在Visual Studio中右击project,选择Property,修改General中的Debug Information Format为下图(默认为:Program Database for Edit And Continue (/ZI))
重新debug,我们会看到汇编代码如下:
上面的填充CC以及sub esp的操作已经没有了。如果修改代码如下:
则汇编代码变化为:
注意962BC3地址的sub esp,8,因为我们有两个local变量,所以栈预留了8个字节。那么如果我们有很多个变量呢?大家可以自己试验一下。
更多精彩
赞助商链接