Linux及安全 内核分析计算机是如何工作的

Linux及安全 内核分析计算机是如何工作的

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

一、实验内容:

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

二、实验过程:

在Linux模拟器上,打开一个shell命令运行器,在Code文件夹中建立一个c文件,用vi命令运行,打开main.c文件,输入一个简单的c程序,用gcc -S -o main.s main.c -m32,将C程序反汇编,用vi命令打开main.s,分析汇编语言。

三、实验截图:

1.shell命令:

2.一个简单的c程序:

3.反汇编结果:

四、代码分析:

1.c语言分析:

int g( int x ){

return  x + 7;

}

int f( int x ){

return g(x);

}

int main( void ) {

return f(7) + 7;

}

main函数调用f(x)函数,f函数调用g函数,g函数将自变量加7后返回,返回到main函数后,再将结果加7后返回。

2.汇编语言分析:

g:

pushl %p ;栈底入栈

movl %esp, %p ;置空站

movl 8(%p), %x ;栈底上移两位,然后将所指位置的值传给eax

addl $7, %x ;加7

popl %p ;栈底出栈

ret ;返回

f:

pushl %p ;栈底入栈

movl %esp, %p ;置空站

subl $4, %esp ;栈顶下移一位

movl 8(%p), %x ;栈底上移两位,然后将所指位置的值传给eax

movl %x, (%esp) ;;将eax的值传给栈顶所指的位置

call g ;调用g函数

leave ;f函数执行完毕

ret ;返回

main:

pushl %p ;栈底入栈,esp - 4

movl %esp, %p ;将esp的值赋给ebp,ebp - 4, 然后esp 与 ebp指向同一位置

subl $4, %esp ;esp ;下移一位

movl $7, (%esp) ;将立即数4给esp

call f ;调用f函数

addl $7, %x ;将返回值再加7

leave ;主函数执行完毕

ret ;返回

五、实验总结:

通过这次实验,我重新复习了汇编的相关知识,对于一些汇编基础知识的理解变得更加透彻。通过反汇编一个简单的c程序,我也大致明白了计算机是怎样执行指令与指令是怎样转换成计算机所能理解的最简单语言的。另外,在这次试验中我也重温了栈的结构,各个寄存器的用途以及计算机是如何执行反汇编的,收获颇丰。O(∩_∩)O

时间: 2024-10-12 10:31:58

Linux及安全 内核分析计算机是如何工作的的相关文章

linux内核分析--计算机是如何工作的

知识点: 冯诺依曼体系结构结构,它最核心的思想是存储程序计算机. cpu通过总线与内存连接,依靠ip指针依次从内存中取出一条指令执行. API:程序员与计算机的接口界面. ABI:程序与CPU的接口界面. 寄存器.寻址方式和各类指令在学习<深入理解计算机>和<汇编>时已做了详细了解,不再赘述. 实验: 截图入下: 原代码为: int g(int x) { return x+3; } int f(int x) { return g(x); } a int main(void) { r

Linux内核分析——计算机是如何工作的

实验楼实验截图:

Linux内核分析--操作系统是如何工作的

“平安的祝福 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 一.初始化进程 操作系统内核启动入口函数是void __init my_start_kernel(void): 在这里简单定义进程的的两个cpu状态: struct Thread {    unsigned long        ip; //表示eip指令    unsigned long        sp;/

Linux内核分析——操作系统是如何工作的

姓名:王晨光 学号:20133232 王晨光+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程的启动和切换源代码及分析 typedef struct PCB用于表示定义了一个进程,定义了进程管理相关的数据结构.同时也设置了用于保存EIP和ESP的数据类型. 下列代码为mymain.c部分代码: void __init my_start_kernel(void) { int pid

Linux学习之路一计算机是如何工作的

初次接触MOOC课堂,里面有个很牛X的老师教Linux,恰好自己有兴趣学,顾有了此系列学习博文. 第一讲   计算机是如何工作的 学习Linux,涉及到了C语言和汇编以及操作系统的知识,顾第一讲要讲讲汇编的知识,C和操作系统知识自行复习.以下知识都是AT&T汇编的知识,可能与Intel汇编有些不同. 知识一: Example instruction        What it does 知识二: 有这些知识差不多就能看懂汇编了.现在给一个简单的C程序,main.c,然后让它编译成汇编程序,得到

linux内核分析(网课期末&amp;地面课期中)

堆栈变化过程: Linux内核分析——计算机是如何工作的 计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能: enter pushl %ebp movl %esp,%ebp leave movl %ebp,%esp popl %ebp 函数参数传递机制和局部变量存储 中断,多道程序操作系统的基点,

Linux内核分析作业一

一.实验 通过反汇编一个简单的c语言程序来分析计算机是如何工作的 1.进入实验楼,在实验楼环境下把c语言代码转换成汇编码 汇编代码如下图: 二.汇编代码的工作过程中堆栈的变化:(手绘步骤,顺序是从左到右,从上到下) 三.计算机是如何工作的: 计算机的基本原理是存储程序和程序控制,按照冯若依曼体系结构计算机分为CPU和内存,内存用来存储程序,CPU从内存取指令来执行,按程序编排的顺序,一步一步地取出指令.在计算机中使用了最原始的汇编程序,函数调用堆栈是由逻辑上多个堆栈累加起来的,函数的返回值默认使

20135201李辰希《Linux内核分析》第一周 计算机是如何工作的?

计算机是如何工作的 1冯诺依曼体系结构:即具有存储程序的计算机体系结构 目前大多数拥有计算和存储功能的设备(智能手机.平板.计算机等)其核心构造均为冯诺依曼体系结构 从硬件来看:CPU与内存通过主线连接,CPU上的IP(可能是16.32.64位)总指向内存的某一块区域:IP指向的CS(代码段)也在内存中:CPU总是执行IP指向的指令. 从软件来看:API(应用程序编程接口,与编程人员)与ABI(程序与CPU的借口界面) 是两个比较重要的软件接口 2. x86(32位)的寄存器中,低16位作为16

Linux内核分析作业(1)——计算机是如何工作得?

根据163MOOC学院中国科学技术大学孟宁孟老师课程所写得博客 作者:肖冲冲 原创作品请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一,计算机的工作过程 计算机的基本原理是存储程序和程序控制(冯﹒诺依曼体系),简单来说,我们需要先把需要进行操作的指令(程序)和数据先输入到计算机的存储设备中,然后计算机将严格执行需要执行的指令,包括从那个地址取数(或指令),进行什么操作(加减移位等),然后再送回到什