《Linux内核分析》第一周学习报告
第一周:计算机是如何工作的
姓名:王玮怡 学号:20135116
第一节 存储程序计算机工作模型(冯诺依曼体系结构)

IP指向的内存地址,取指令执行,完成后,IP值自加一,取下一条指令再执行。

API:程序员与计算机的借口界面。
ABI:二进制(指令编码)接口。
第二节 X86汇编基础
一、X86 CPU 32位寄存器


CPU在实际取指令时根据cs:eip来定位一个指令。
二、常见的汇编指令
mov及几种内存寻址方式:

1、寄存器模式,以%开头的寄存器标示符,将前一个寄存器里的内容放到后一个寄存器中(不涉及内存)。
2、立即数寻址:以$开头的数值为立即数,将前一个数放到后面的寄存器中(不涉及内存)。
3、直接寻址:直接访问一个指定的内存地址的数据,前一个代表内存地址,将该地址所指向的内存数据存档到后一个寄存器中。将前一个十六进制数强制转换成int指针,取该指针所指地址里的值存放到edx寄存器。
4、间接寻址:前一个括号里表示一个内存地址,即将第一个括号里所表示的内存地址所指向的数据存放到后一个寄存器里。%ebx代表ebx寄存器所存的值为地址,加括号为这个内存地址存放的值放到edx寄存器中。
Linux内核使用的是AT&T汇编格式。
三、其他基本指令(push、pop、call、ret)


ebp指向栈底;esp指向栈顶
add向上加;sub向下减
call函数调用,调用后面地址所指数据
eip寄存器不能被直接修改,只能通过特殊指令间接修改,如call、ret (*)。
第三节、汇编一个简单的C程序分析其汇编指令执行过程
一、

二、

第四节 通过汇编一个简单的C程序,分析汇编代码理解计算机
一、实验要求:
使用 gcc -S -o main.s main.c -m32 编译成汇编代码,C语言代码如下:
int g(int x)
{
return x + 5;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(6) + 2;
}
二、实验过程
1、命令行中先输入如下命令:

2、将已有的C代码复制到剪贴板中:

3、继续在命令行中输入:vi main.c;
4、进入新界面后,将C代码复制进去;
5、退出到之前的命令行后,输入ls保存代码;
6、输入gcc main.c编译这个代码,生成一个目标文件a.out;若要编译成一个汇编代码,则输入代码:gcc -S -o main.s main.c -m32 其中,以.s作为汇编文件的扩展名,生成32位的汇编程序;
7、输入vi main.s,查看汇编代码;


8、删除所有以点开头的内容,剩下的就是纯汇编代码:


三、分析代码


四、遇到的问题
第一次实验在将C程序编译成汇编程序时,漏加了 -m32,导致汇编程序中出现popq等情况。
五、实验体会
这次实验是我第一次在Linux系统中进行操作。由于之前没有相关的知识铺垫,外加编程方面基础也不太扎实,所以这次实验对我来说难度不小。前面那些理论的内容看了一遍之后开始发蒙,有些概念也比较容易混淆。到了后面看视频分析进栈出栈的过程时,听着就是晕晕乎乎好像有点明白了,但是到自己分析的时候又彻底乱了,所以画过程分析图也是费了很多时间。但是,通过这次实验,对于以后使用的实验环境还是有了一定的了解,也巩固了堆栈方面的相关知识,相信对以后的学习会有所帮助。
《Linux内核分析》第一周学习报告的更多相关文章
- LINUX内核分析第一周学习总结——计算机是如何工作的
LINUX内核分析第一周学习总结——计算机是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...
- linux内核分析第一周学习笔记
linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析第一周学习博客 --- 通过反汇编方式学习计算机工作过程
Linux内核分析第一周学习博客 通过反汇编方式学习计算机工作过程 总结: 通过这次对一个简单C程序的反汇编学习,我了解到计算机在实际工作工程中要涉及大量的跳转指针操作.计算机通常是顺序执行一条一条的 ...
- 20135320赵瀚青LINUX内核分析第一周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.概述 第一周的学习内容主 ...
- Linux内核分析——第一周学习笔记20135308
第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储 ...
- Linux内核分析第一周学习总结:计算机是如何工作的?
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.冯诺依曼体系 ...
- Linux内核分析——第一周学习笔记
20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 第一节 存储程序计算机工作模型 1.冯诺依曼体系结构:即具有存储程序的计算机体系结构.目前大多数拥有计算和存储功能的设备(智能 ...
- LINUX内核分析第二周学习总结——操作系统是如何工作的
LINUX内核分析第二周学习总结——操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- Linux内核分析第二周学习笔记
linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析第二周学习博客——完成一个简单的时间片轮转多道程序内核代码
Linux内核分析第二周学习博客 本周,通过实现一个简单的操作系统内核,我大致了解了操作系统运行的过程. 实验主要步骤如下: 代码分析: void my_process(void) { int i = ...
随机推荐
- H5页面meta标签小结:
<meta name="viewport" content="width=device-width,user-scalable=no"> <m ...
- Nowcoder 提高组练习赛-R7
Nowcoder 提高组练习赛-R7 https://www.nowcoder.com/acm/contest/179#question 中间空了两场,因为实在是太难了... 第五场的第二题好像还比较 ...
- [C++] set与multiset的常用函数
参考资料:[C++ STL]Set和Multiset set 与 multiset set不允许重复 multiset允许重复 例: set : 1 2 3 4 5 6 multiset : 1 2 ...
- vagrant特性——基于docker开发环境(docker和vagrant的结合)-2-命令
Docker Commands Docker provider公开了一些额外的vagrant命令,这些命令对于与Docker容器交互非常有用.这有助于你在vagrant之上的工作流程,这样你就可以在底 ...
- 20165302 程上杰 Exp2 后门原理与实践
一,后门概念 后门就是不经过正常认证流程而访问系统的通道. 二,后门工具 1.netcat(nc.ncat) 是一个底层工具,进行基本的TCP UDP数据收发.常被与其他工具结合使用,起到后门的作用. ...
- JVM内存管理及GC机制
一.概述 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露 ...
- OpenCV——LBP(Local Binary Patterns)特征检测
#include <opencv2/opencv.hpp> #include <iostream> #include "math.h" using name ...
- sparse linear regression with beta process priors
虽然翻译水平有限,但是看原文虽然看得懂,但是在词汇的问题上,会导致看了后面忘了前面,所以先蹩脚的翻译成中文,然后在仔细思考论文的思想(当然不能翻译成中文就不看英文原本了,得两者一起看,这样不会丢失前面 ...
- 微信小程序开发 [07] 写在后面的话
写在后面的话基本算是吐槽了,在学完小程序的课程之后,我用博客园的api,写了个闪存的小程序,本来兴致勃勃甚至这篇是准备写"我的第一个小程序发布啦",然而并没有. 不是说我偷懒了没写 ...
- 20155310 Exp6 信息收集与漏洞扫描
20155310 Exp6 信息收集与漏洞扫描 基础问题回答 1.哪些组织负责DNS,IP的管理. 顶级的管理者是Internet Corporation for Assigned Names and ...