专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 汇编语言

反汇编一个函数?解决方案

发布时间:2010-06-14 15:46:56 文章来源:www.iduyao.cn 采编人员:星星草
反汇编一个函数?
今天在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字节就够了吗?如果可以能解释一下吗?


------解决方案--------------------
现实中的编译器不是向你想得那样,如果我们用汇编来写你那段函数,当然可以
做到用多少就分多少的精确手术。但是编译器往往由于其他原因会多分配local变量
或多增加指令,比如:检查堆栈overflow,调试,捕获非法读写vals,指令乱序,
优化,将耗时操作简化,将循环打散等。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: