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

时间:2020-12-22 00:51:59


首先编写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


如下是纯汇编代码:

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

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

各寄存器解释:

ebp:堆栈栈底寄存器

esp:堆栈栈顶寄存器

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

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

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

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

总结:

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

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


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