您的位置:首页 > 编程语言 > C语言/C++

How computer work?

2016-02-28 13:26 357 查看
czh + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

实验要求:通过反汇编一个简单的C程序,分析汇编代码并理解计算机如何工作.

一、实验过程.

1. 编写一个简单的c程序,如图所示:



2. 使用 gcc -S -o filename.s filename.c -m32进行编译,如图所示:



3. 编译后并对无关的指令进行删除后的汇编代码,如图所示:



二、分析汇编代码.

汇编代码如下:

g:
pushl   %ebp
movl    %esp, %ebp
movl    8(%ebp), %eax
addl    $1024, %eax
popl    %ebp
ret
f:
pushl   %ebp
movl    %esp, %ebp
subl    $4, %esp
movl    8(%ebp), %eax
movl    %eax, (%esp)
call    g
leave
ret
main:
pushl   %ebp
movl    %esp, %ebp
subl    $4, %esp
movl    $8, (%esp)
call    f
addl    $1, %eax
leave
ret


执行C程序是从main函数开始,汇编程序也是从main函数,以下执行一行汇编代码所对应的堆栈图的执行。

1.



2.



3.



4.



5.



6.



7.



8.



9.



10.



11.



12.



13.



14.



15.



16.



17.



18.



19.



20.



21.



22.



23.



三、计算机工作原理:

根据%eip寄存器(程序计数器)的值,从内存中取响应的指令并执行,改变函数堆栈,再根据%eip中的值循环执行以上步骤,直到程序结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言