一.知识点总结

1.冯诺依曼体系结构的要点:

①五大基本类型部件:运算器、控制器、存储器、输入设备、输出设备

②用二进制来表示指令和数据

③ 核心:存储程序计算机

2.常见的汇编指令

mov指令(l指32位,b指8位,w指16位,指64位)

pushl %eax

把EAX寄存器的值压到堆栈栈顶 ,栈在增长

popl %eax

从堆栈栈顶取一个存储单元,从堆栈栈顶的位置放到EAX寄存器中,栈在收缩

call 0x12345

call指令是函数调用,调用一个地址

ret

ret指令是函数返回

3.寻址方式

寄存器寻址:操作的是寄存器,不和内存打交道

movl %eax, %edx

立即寻址:也和内存没有关系

movl $0x123, %edx

直接寻址:用内存地址直接访问内存中的数据

movl 0x123, %edx

间接寻址:寄存器加个小括号

movl (%ebx), %edx

变址寻址:在间接寻址的基础上,在原地址上加一个立即数4

movl 4(%ebx), %edx

4.几个比较重要的寄存器

EAX 累加寄存器

EBX 基址寄存器

ECX 计数寄存器

EDX 数据寄存器

EBP 堆栈基址指针

ESI EDI 变址寄存器

ESP 堆栈栈顶寄存器

二.实验:反汇编一个简单的C程序

1.反汇编的定义:

把目标代码转为汇编代码的过程,也可以说是把机器语言转换为汇编语言代码、低级转高级的意思。

2.实验过程:

在命令行下输入“ vi main.c ”命令即可打开文本编辑器VIM编辑main.c文件

然后按“ i ”键进入输入状态,从剪切板复制程序(修改了其中部分数字)

然后点击【esc】键退出编辑模式,然后点击“ : ”键进入命令行模式,输入wq,将粘贴的代码保存到main.c文件中

编译main.c这个代码文件

gcc main.c

此时会生成一个a.out文件,但是执行效果没有任何输出信息

通过如下命令查看程序的返回值

echo $?



可以看到程序返回值为49

使用如下命令把main.c编译成一个汇编代码

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

打开main.s文件,发现该汇编文件有一些以“.cfi_”和"."打头的字符串

通过如下命令可以删除所有以”.“打头的命令



可以获得“干净”的汇编代码

3.分析main.c中的汇编代码:





4. 遇到的问题:

1.

在使用命令

echo $?

查看程序的返回值时,一定要执行目标文件,否则得到的返回值为0.

2.

在VIM中,通过“ g ^ .s * / d”命令即可删除所有以 . 打头的字符串 没有实现。

最后查阅其他同学的博客发现该命令为

3.

指令

movl  8(%ebp),%eax

是把EBX寄存器存储的数值加8,也就是说,把所对应的的立即数放到EAX寄存器中去,而当前EBP的寄存器所指向的位置不变。

4.

在使用VIM编辑器的时候遇到一些问题,通过询问同学和查阅资料,总结如下:

①vim是个“文本编辑器”;可以将vim视为vi的高级版本;

②vi共有三种模式:

一般模式:以vi打开一个文件就可以进入一般模式,在这个模式中,可以使用上下左右健开移动光标、删除字符、复制粘贴文件数据(但是无法编辑内容);

编辑模式:按下“i,I,o,O,a,A,r,R”等任何一个字母之后会进入编辑模式,若要回到编辑模式,按下【esc】即可退出编辑模式;

命令行模式:在一般模式下,输入“:、/、?”3个中的任意一个按钮,可将光标移到最下面一行。该模式可以提供查找数据的操作,可读取,保存,大量替换字符,离开vi,显示行号等操作。

一般模式与编辑模式及命令行模式可以互相切换。但编辑模式和命令行模式之间不可以互相切换

2019-2020-1 20199324《Linux内核原理与分析》第二周作业的更多相关文章

  1. 2019-2020-1 20199303<Linux内核原理与分析>第二周作业

    2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...

  2. 20169219 linux内核原理与分析第二周作业

    "linux内核分析"的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程. 通用寄存器 AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆 ...

  3. 2019-2020-1 20199314 <Linux内核原理与分析>第二周作业

    1.基础学习内容 1.1 冯诺依曼体系结构 计算机由控制器.运算器.存储器.输入设备.输出设备五部分组成. 1.1.1 冯诺依曼计算机特点 (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存 ...

  4. Linux内核原理与分析-第二周作业

    写之前回看了一遍秒速五厘米:如果

  5. Linux内核原理与分析-第一周作业

    本科期间,学校开设过linux相关的课程,当时的学习方式主要以课堂听授为主.虽然老师也提供了相关的学习教材跟参考材料,但是整体学下来感觉收获并不是太大,现在回想起来,主要还是由于自己课下没有及时动手实 ...

  6. 2019-2020-1 20199314 <Linux内核原理与分析>第一周作业

    前言 本周对实验楼的Linux基础入门进行了学习,目前学习到实验九完成到挑战二. 学习和实验内容 快速学习了Linux系统的发展历程及其简介,学习了下的变量.用户权限管理.文件打包及压缩.常用命令的和 ...

  7. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  8. 2020-2021-1 20209307 《Linux内核原理与分析》第九周作业

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业> 这个作业的目标 & ...

  9. 2019-2020-1 20199329《Linux内核原理与分析》第十三周作业

    <Linux内核原理与分析>第十三周作业 一.本周内容概述 通过重现缓冲区溢出攻击来理解漏洞 二.本周学习内容 1.实验简介 注意:实验中命令在 xfce 终端中输入,前面有 $ 的内容为 ...

  10. 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业

    <Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...

随机推荐

  1. SUCTF 2019-EasySQL

    0x00 知识点: 1:堆叠注入 2:sql_mode : 它定义了 MySQL 应支持的 SQL 语法,以及应该在数据上执行何种确认检查,其中的 PIPES_AS_CONCAT 将 || 视为字符串 ...

  2. lvs和keepalived

    LVS调度算法参考 RR:轮询 WRR :加权轮询 DH :目标地址哈希 SH:源地址hash LC:最少连接 WLC:加权最少连接,默认 SED:最少期望延迟 NQ:从不排队调度方法 LBLC:基于 ...

  3. MBR&/BOOT&GRUB

      能正常工作的grub应该包 括一下文件:stage1.stage2.*stage1_5.menu.lst. 其中stage1要被安装(也就是写入)某个硬盘的主引导记录,或者某个活动分区(这个分区要 ...

  4. Opencv从文件中播放视频

    1.VideoCapture()括号中写视频文件的名字,在播放每一帧的时候,使用cv2.waitKey()设置适当的持续时间,太低会播放的很快,太高会很慢,通常情况下25毫秒就行了. 2.获取相机/视 ...

  5. 用Emoji和照片挑战大众点评,YOBO玩转新点评方式能引领潮流吗?

    对于一家企业来说,要想获得长久生命力的必备元素是什么?是技术底蕴和海量资金?但诺基亚.摩托罗拉和黑莓等巨头的崩塌,已经证明再稳固的基础都有可能只是沙子做的.是让人工智能.云计算.大数据等前沿技术赋能于 ...

  6. gitlab命令详解

    http://www.ruanyifeng.com/blog/2014/06/git_remote.html

  7. 【论文笔记系列】AutoML:A Survey of State-of-the-art (下)

    [论文笔记系列]AutoML:A Survey of State-of-the-art (上) 上一篇文章介绍了Data preparation,Feature Engineering,Model S ...

  8. 微信支付的Demo

    是在一个子项目完成的, 依赖: <dependencies> <!-- spring-boot--> <dependency> <groupId>org ...

  9. 吴裕雄--天生自然TensorFlow2教程:维度变换

    图片视图 [b, 28, 28] # 保存b张图片,28行,28列(保存数据一般行优先),图片的数据没有被破坏 [b, 28*28] # 保存b张图片,不考虑图片的行和列,只保存图片的数据,不关注图片 ...

  10. 如何在Foxwell NT650 OBD2扫描仪上查看实时PID数据?

    这是在Foxwell NT650扫描仪上使用实时数据菜单的操作指南 . 实时数据菜单使您可以查看和记录来自电子控制模块的实时PID数据.菜单选项通常包括: 完整的数据清单 自定义数据列表 如何使用“完 ...