网易云课堂《Linux内核分析》作业
通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
登陆实验楼虚拟机http://www.shiyanlou.com/courses/195
准备main.c源码
main.c打开终端shell,输入以下命令:
gcc –S –o main.s main.c -m32
生成汇编代码main.s
main.s.part1 main.s.part2 main.s.part3精简后的汇编代码
main.s先看C语言代码,该程序由3个函数组成,分别是main()、f()、g(),实现了2+7+5的简单数学计算。
程序首先从main()开始,将数字2传入f(),f()又将main()传入的数字2原封不动的传给g(),g()实现了将传入2加5的操作,结果7返回给f(),f()获得7后直接返回给main(),mian()将获得的7加7后返回最终结果14.
理论上编译后的汇编语言也应该实现上述功能,即计算2+5+7值。
下面我们来分析精简后的汇编代码:
左边代码行标表示eip,红框表示当前运行的代码,eax初始化为未知变量,右边蓝色格子表示内存段,为简化描述在32位环境下1个内存单元格表示4byte,ebp和esp初始值均为0
程序从main开始
1将ebp压栈,相当于执行以下两条语句:
subl $4, %esp //esp减4byte,向下移动1格,此时esp指向1
movl
