通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的(原创)


首先编写c程序代码:

main.c

  1. int g(int x)
  2. {
  3.   return x + 16;
  4. }
  5.  
  6. int f(int x)
  7. {
  8.   return g(x);
  9. }
  10.  
  11. int main(void)
  12. {
  13.   return f(64) + 155;
  14. }

然后使用下面的指令进行编译和汇编:

gcc -S -o main.s main.c -m32

平台ubuntu 14.04 _32bit


如下是纯汇编代码:



各寄存器解释:

ebp:堆栈栈底寄存器

esp:堆栈栈顶寄存器

eip:自动跳转下一行运行程序

下面是堆栈变化情况,注意:上面是地地址,堆栈向下增长。



总结:

计算机工作原理就是:计算机在堆栈和各类寄存器的帮助下,对数据进行各种操作,从而形成计算结果。

进一步而言就是,具体的寄存器:eax通用寄存器,eip程序计数器,esp:栈顶指针,ebp:栈底指针。在这些寄存器的帮助下,数据和各类跳转信息,在程序栈之中上上下下的移动,从而形成跳转和eax数据累加等操作,把复杂的程序进行拆分成大量的栈操作,从而形成计算结果。


吕超  原创作品转载请注明出处  《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值