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

Call Stack简介

 2010-11-04 08:44:04 来源:WEB开发网   
核心提示:Prologue的说明Q: 为什么要ebp-0C0h,而不是其他的数字?A: 看下面一行的30h,Call Stack简介(3),乘以sizeof(DWORD)之后,即是0C0h,因为我们有两个local变量,所以栈预留了8个字节,这段空间包含了参数使用的栈空间、Edit&Continue的空间和编译器对于栈保护的空间

Prologue的说明

clip_image019

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)

clip_image021

重新debug,我们会看到汇编代码如下:

clip_image022

上面的填充CC以及sub esp的操作已经没有了。如果修改代码如下:

clip_image023

则汇编代码变化为:

clip_image024

注意962BC3地址的sub esp,8,因为我们有两个local变量,所以栈预留了8个字节。那么如果我们有很多个变量呢?大家可以自己试验一下。

上一页  1 2 3 

Tags:Call Stack 简介

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接