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

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

学号:20135114

姓名:王朝宪

注: 原创作品转载请注明出处   《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

1

1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同)

使用

  1. gcc –S –o main.s main.c -m32

命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同

  1. int g(int x)
  2. {
  3. return x + 3;
  4. }
  5. int f(int x)
  6. {
  7. return g(x);
  8. }
  9. int main(void)
  10. {
  11. return f(8) + 1;
  12. }

图一:简单的c程序代码

图二:实验楼操作过程

图三:通过反汇编c程序而生成的汇编代码

2)根据本周所学知识分析汇编代码的工作过程,撰写一篇署名博客,并在博客文章中注明“真实姓名(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”,博客内容的具体要求如下:

  • 题目自拟,内容围绕计算机是如何工作的进行;
  • 博客中需要使用实验截图
  • 博客内容中需要仔细分析汇编代码的工作过程中堆栈的变化
  • 总结部分需要阐明自己对“计算机是如何工作的”理解。

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

总结:存储程序计算机模型为冯诺依曼体系结构,计算机的CPU从IP所指向的内存中的代码段取一条指令执行,执行完IP自加1,再继续执行下一条,这就是计算机的工作过程。

3)请提交博客文章URL到网易云课堂MOOC平台,编辑成一个链接可以直接点击打开。

时间: 2024-10-04 14:02:18

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

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个字节,

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

周玉勇 原创作品转载请注明出处 <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 mov

反汇编一个简单的C程序并分析

反汇编一个简单的C程序并分析 C 源码: int g(int x) { return x+1; } int f(int x) { return g(x); } int main(void) { return f(2) + 3; } 汇编源码: 1 g: 2 pushl %ebp 3 movl %esp, %ebp 4 movl 8(%ebp), %eax 5 addl $1, %eax 6 popl %ebp 7 ret 8 f: 9 pushl %ebp 10 movl %esp, %ebp

实验---反汇编一个简单的C程序(杨光)

反汇编一个简单的C程序 攥写人:杨光  学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ) 实验要求:  实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用  gcc –S –o main.s main.c -m32 命令编译成汇编代码, 代码如下: int g(int x) { retu

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

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

一个简单的Qt程序分析

本文概要:通过一个简单的Qt程序来介绍Qt程序编写的基本框架与一些Qt程序中常见的概念 #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton *button = new QPushButton("Quit"); QObject::connect(button, SIGNA

反汇编一个简单的C程序

一.实验截图 二.汇编代码分析: cpu首先执行main函数里的pushl %ebp和movl %esp %ebp.如下图: esp减去4就是向上移动4位到1,如下图: 把1赋值给esp,如下图: call f即为eip转到f执行,先push eip,再将f的地址传给eip. ... ... ... 太晚了,先略,以后补上,嘿嘿. 三.对于计算机是如何工作的? 首先是冯诺依曼体系,cpu不断的从内存中读取数据.而当每个程序要运行的时候,内存就把硬盘上的程序加载进来开始给cpu去执行. 基本就是这

实验--反汇编一个简单的C程序(李鹏举)

  攥写人:李鹏举  学号:20132201 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ) 实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用gcc –S –o main.s main.c -m32命令编译成汇编代码. 代码如下: int g(int x) { return x + 8; } int f(i