注册 登录
编程论坛 汇编论坛

ebp在子程序中不是不能改动的吗

nbaqqqq 发布于 2011-08-30 14:22, 577 次点击
程序代码:
00401340  /$  55            PUSH EBP
00401341  |.  8B6C24 0C     MOV EBP,DWORD PTR SS:[ESP+C]
00401345  |.  56            PUSH ESI
00401346  |.  57            PUSH EDI
00401347  |.  8B7C24 18     MOV EDI,DWORD PTR SS:[ESP+18]
用OD看一个子程序的开头是这样的,ebp被改动了,而且还用esp来找参数
ebp在子程序中不是用来寻址参数不能改动的吗
子程序的开头不是这两句吗
push ebp
mov ebp,esp
求指教
2 回复
#2
zklhp2011-08-30 14:40
push ebp
mov ebp,esp

这是一种堆栈的框架 是C编译器在某些编译参数下生成的代码

举个例子 比如gcc的-fomit-frame-pointer 就可以不生成这样的代码 具体你看资料

在我说的那种框架里面 ebp是保存esp的 而且用ebp来寻址

但 不代表一定用这种框架 而且编译器 也就是用我说的那个参数 是可以生成其他的类型的堆栈框架的 也就是你举的例子

具体问题具体分析 我能说的就这些了
#3
nbaqqqq2011-08-30 14:48
谢谢版主
1