反汇编一个函数?

djking1986 2010-04-10 03:34:03
今天在linux下对一个函数进行了反汇编(基于AT&T)

C语言函数原型:
int bar(int c, int d)
{
int e = c + d;
return e;
}

反汇编结果:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 83 ec 10 sub $0x10,%esp //问题
6: 8b 45 0c mov 0xc(%ebp),%eax
9: 03 45 08 add 0x8(%ebp),%eax
c: 89 45 fc mov %eax,0xfffffffc(%ebp)
f: 8b 45 0c mov 0xc(%ebp),%eax
12: 03 45 08 add 0x8(%ebp),%eax
15: c9 leave
16: c3 ret

我就是不明白函数中明明只有一个局部变量e,为什么要sub $0x10,%esp ,不是只要减4字节就够了吗?如果可以能解释一下吗?
...全文
123 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
大熊猫侯佩 2010-04-10
  • 打赏
  • 举报
回复
现实中的编译器不是向你想得那样,如果我们用汇编来写你那段函数,当然可以
做到用多少就分多少的精确手术。但是编译器往往由于其他原因会多分配local变量
或多增加指令,比如:检查堆栈overflow,调试,捕获非法读写vals,指令乱序,
优化,将耗时操作简化,将循环打散等。
djking1986 2010-04-10
  • 打赏
  • 举报
回复
自己顶一下

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧