How computer work?

czh + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
实验要求:通过反汇编一个简单的C程序,分析汇编代码并理解计算机如何工作.

一、实验过程.
1. 编写一个简单的c程序,如图所示:
简单的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中的值循环执行以上步骤,直到程序结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值