分析汇编代码理解计算机如何工作

周玉勇 原创作品转载请注明出处

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

把C代码反汇编成汇编代码,再来分析计算机如何工作

下面是C代码

C代码编译成汇编的代码

简化的汇编代码

 1 g:
 2     pushl    %ebp
 3     movl    %esp, %ebp
 4     movl    8(%ebp), %eax
 5     addl    $6, %eax
 6     popl    %ebp
 7     ret
 8 f:
 9     pushl    %ebp
10     movl    %esp, %ebp
11     subl    $4, %esp
12     movl    8(%ebp), %eax
13     movl    %eax, (%esp)
14     call    g
15     leave
16     ret
17 main:
18     pushl    %ebp
19     movl    %esp, %ebp
20     subl    $4, %esp
21     movl    $4, (%esp)
22     call    f
23     addl    $2, %eax
24     leave
25     ret

汇编代码的工作过程中堆栈的变化分析

总结:EIP告诉CPU该执行哪条指令,通过执行特定序列的指令,计算机就可以完成特定的计算工作

时间: 2024-10-05 23:27:19

分析汇编代码理解计算机如何工作的相关文章

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

实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1 1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与

Linux内核分析第一周-通过分析汇编代码理解计算机是如何工作的

首先,我们先写一个简单的C语言程序,如下: int g(int x) { return x +3; } int f(int x) { return g(x); } int main(void) { return f(8) + 1; } 然后我们把源程序编译成一个汇编语言,指令如下 gcc -S -o main.s main.c -m32 得到结果,删去符号项得到结果 首先,main函数为该程序的开始入口,所以从main函数开始分析: 在line 17 ~ line 18是进入main函数(ent

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

C语言代码: int g(int x) { return x + 5; } int f(int x) { return g(x); } int main(void) { return f(5) + 1; } 反汇编代码: g: pushl  %ebp                   将ebp的值压栈,同时esp向下移动4个字节 movl   %esp, %ebp         ebp也指向esp指的位置 movl   8(%ebp), %eax    将ebp变址寻址8即向上移动8个字节,

理解计算机的工作方式——通过汇编一个简单的C程序并分析汇编代码

Author: 翁超平 Notice:原创作品转载请注明出处 See also:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  本文通过汇编一个简单的C程序,并分析汇编代码,来理解计算机是如何工作的.整个过程都在实验楼上完成,感兴趣的读者可以通过上面给出的课程链接自行动手学习.以下是实验过程和结果. 一.操作步骤 1.首先在通过vim程序建立main.c文件.代码如下: 图1 2.使用如下命令将main.c编

汇编代码调用系统调用的工作过程

钟晶晶 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 工作过程 以41号进程dup为例,说明在应用程序如何使用Linux的系统调用.dup()复制一个打开的文件描述符,并返回一个新描述符,二者都指向同一个打开的文件句柄.系统会保证新描述符一定是编号低最低的未使用文件描述符.使用库函数API调用dup()的程序: 使用C语言嵌入汇编代码来实现调用dup(): 第一条汇编语句将立即

通过库函数API和C代码中嵌入汇编代码剖析系统调用的工作机制

作者:吴乐 山东师范大学<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本次实验的主要内容就是分别采用API和gcc嵌入汇编的方式调用system_call.系统调用其实就是操作系统提供的服务.我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变量打印在屏幕上,就必须调用printf,而printf这个函数内部就使用了write这个系统调用.操作系统之所以以system ca

Linux内核分析——汇编代码执行及堆栈变化

张潇月<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验步骤 首先借助实验楼这个平台进入Linux系统,打开了Xfce终端将代码写入. 通过cd Code命令打开Code文件夹,将后面录入的代码放在文件夹中,便于下载代码,有利于后面的详细分析. 其中通过命令gcc  main.c命令来编译代码:通过gcc  -S  -o  main.s  main.c  –m32来反汇编代码.-m32代表的是32位系统.

《Linux内核分析》MOOC课程 反汇编一个简单的C程序,分析汇编代码

一个简单c程序 分析一个简单的c程序 main.c 如下图: 用命令 gcc –S –o main.s main.c -m32编译成汇编文件.在汇编文件中有许多的虚指令并不会形成机器指令,为了使分析简单我们把大部分去掉: 得到如下图所示: 栈的介绍 APUE中指出每一个c程序,都有一个独立的地址空间,在内存中的典型布局如下: 对栈的操作和我们在数据结构中的栈的操作是类似的,ebp,esp(具体名称与cpu体系结构相关) 这两个寄存器直接与栈的操作相关. 栈地址是从高到低的方向分配的. 开始一个新

从一段代码的汇编看计算机的工作原理

朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 大家都知道,现在的计算机主要遵循的是所谓的“冯诺依曼框架”.那什么是冯诺依曼框架呢,其实就是计算机通过总线从内存中读取一条条的程序和数据,将它们存储在自己的寄存器中一条条地执行,如下图所示. 而今天,我们将通过汇编一个具体的C程序来探讨计算机工作的流程. 首先写下这么一段C程序: 1 //linux.c 2 int g(x)