首先编写c程序代码:
main.c
- int g(int x)
- {
- return x + 16;
- }
- int f(int x)
- {
- return g(x);
- }
- int main(void)
- {
- return f(64) + 155;
- }
然后使用下面的指令进行编译和汇编:
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