2018-2019-1 20189203《Linux内核原理与分析》第二周作业
一、本周学习情况
我本周结合《庖丁解牛》教材学习了蓝墨云的视频课,主要学习内容如下:
1、学习了计算机的工作原理,深入理解了冯诺依曼体系结构。
2、学习了X86-32 CPU的寄存器
3、学习了寻址方式和常用汇编指令
- 立即数即常数,如$8,表示$开头后跟一个数值;
- 寄存器数,表示某个寄存器中保存的值,如%exa
- movL表示32位指令
- 通用寄存器:
- EAX:累加器
- EBX:基地址寄存器
- ECX:计数寄存器
- EDX:数据寄存器
- ESI:源变址寄存器
- EDI:目的变址寄存器
- EIP:指令指针寄存器
- 几种常用的寄存器寻址方式及代码:
register mode(寄存器寻址):movl %eax,%edx edx=eax
;把eax内容放入edx,等号相当于把eax赋值给edx。
immediate(立即寻址):movl $0x123,%edx edx=0x123
; 立即数是以$开头的数值,把16进制的数值放入edx。
direct(直接寻址):movl 0x123,%edx edx=*(int32_t*)0x123
;内存地址16进制的123内存放入edx,把0x123强制转化成32-bit的指针,表示取它的值。
indirect(间接寻址):movl (%ebx),%edx edx=*(int32_t*)ebx
;ebx这个寄存器存的值加个括号表示内存地址,所存储的数据放入edx。
displaced(变址寻址):movl 4(%ebx),%edx edx=*(int32_t*)(ebx+4)
; 除了在间接寻址的基础上先给ebx地址上加个立即数ebx+4。
相关的寻址方式在数据结构中曾经学习过。
二、通过反汇编一个简单的C程序,分析汇编代码理解计算。
- 首先在Linux中写一段C程序。随后通过Linux中的编译命令将其编译为汇编指令:
- 最后整理之后的代码如下:
- 下面开始分析程序执行过程:
代码在执行过程中堆栈空间和相应的EBP/ESP寄存器会不断变化。首先假定堆栈为空栈的情况下EBP和ESP寄存器都指向栈底。具体执行过程如下:
补充:图5和图17 esp的位置在3号。 - 遇到的困难:之前没有接触过汇编语言,在学习和理解的过程中遇到了很多困难,在通过对实验程序的分析,加深了对栈的理解,也基本理解了一些简单汇编语言的用法。后续还需要反复练习和重温。
2018-2019-1 20189203《Linux内核原理与分析》第二周作业的更多相关文章
- 2019-2020-1 20199303<Linux内核原理与分析>第二周作业
2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...
- 20169219 linux内核原理与分析第二周作业
"linux内核分析"的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程. 通用寄存器 AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆 ...
- 2019-2020-1 20199314 <Linux内核原理与分析>第二周作业
1.基础学习内容 1.1 冯诺依曼体系结构 计算机由控制器.运算器.存储器.输入设备.输出设备五部分组成. 1.1.1 冯诺依曼计算机特点 (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存 ...
- Linux内核原理与分析-第二周作业
写之前回看了一遍秒速五厘米:如果
- Linux内核原理与分析-第一周作业
本科期间,学校开设过linux相关的课程,当时的学习方式主要以课堂听授为主.虽然老师也提供了相关的学习教材跟参考材料,但是整体学下来感觉收获并不是太大,现在回想起来,主要还是由于自己课下没有及时动手实 ...
- 2019-2020-1 20199314 <Linux内核原理与分析>第一周作业
前言 本周对实验楼的Linux基础入门进行了学习,目前学习到实验九完成到挑战二. 学习和实验内容 快速学习了Linux系统的发展历程及其简介,学习了下的变量.用户权限管理.文件打包及压缩.常用命令的和 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...
- 2020-2021-1 20209307 《Linux内核原理与分析》第九周作业
这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业> 这个作业的目标 & ...
- 2019-2020-1 20199329《Linux内核原理与分析》第十三周作业
<Linux内核原理与分析>第十三周作业 一.本周内容概述 通过重现缓冲区溢出攻击来理解漏洞 二.本周学习内容 1.实验简介 注意:实验中命令在 xfce 终端中输入,前面有 $ 的内容为 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业
<Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...
随机推荐
- 我们为什么要在Android中使用RxJava
本文翻译来自–>Why should we use RxJava on Android 另外: 微凉一季 再另外: 微凉一季 感觉RxJava近期风生水起,不学习一下都不好意思了.洒家也是初学R ...
- php -- func_get_args
该方法必须在某个方法内部执行才有效 返回值为索引数组,一个数组元素对应一个参数
- adsas数据库去O记
adsas 数据库是用于广告买量数据分析;在17年由 Oracle 迁移到 PostgreSQL.现把之前的迁移笔记整理下.本次迁移表91个:存储过程21个:数据库大小2G. 1. 准备Postgre ...
- Golang 笔记 5 go语句
Go语句和通道类型是Go语言的并发编程理念的最终体现.与defer语句相同,go语句也可以携带一个表达式语句.Go语句的执行会很快结束,并不会对当前流程的进行造成阻塞或明显的延迟.一个简单的示例: ...
- Zephyr学习(一)Zephyr介绍
Zephyr是一个面向物联网的嵌入式实时操作系统(RTOS),是Linux基金会旗下的一个项目,具有以下特点: 1.安全的,灵活.高可扩展性,支持多种硬件平台(ARM.ARC.X86.xtensa.n ...
- VSCode远程调试Go程序方法(Attach)
set launch.json { "name": "Attach", "type": "go", "requ ...
- .NET开发人员遇到Maven
由.NET转向Java开发,总是会带着.NET平台的一些概念和工具想着在对应的Java平台是否也有着相同的解决方案.第一次用Maven随手打开pom.xml,看着里面许多属性描述我的感觉就是这是一个M ...
- C#队列Queue实现一个简单的电商网站秒杀程序
电商的秒杀和抢购,对程序员来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要. 我们 ...
- C++对windows控制面板的操作
经常碰到程序无法卸载, 就老是骂微软搞的什么安装方式,安装好了不能卸载. 后来就打算研究一下windows是如何卸载程序的,一个程序安装完后留下了什么信息用于后面的卸载. 研究对象win7 64位, ...
- 第四天,通过windows来执行第一个python文件步骤
该看 第 38部分的啦