《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 = ...
随机推荐
- mac系统默认python3.6
1. 终端打开.bash_profile文件 终端输入:open ~/.bash_profile 2. 打开.bash_profile文件后在内容最后添加 alias python=" ...
- UltraISO制作使用(服务器装机u盘制作)
1.准备工作: 1)U盘一个,需要格式化(大于4G,毕竟ISO文件就已经大于4G了) 2)CentOS7.1 iso文件一个(去这里下载:http://www.centoscn.com/) 3)Ult ...
- BZOJ 1113 海报 单调栈
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1113 题目大意: N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. ...
- AndroidStudio编译error:app:validateReleaseSigning'Keystore file not found for signing config 'release
使用AndroidStudio编译时提示error: Error:Execution failed for task ‘:app:validateReleaseSigning’. > Keyst ...
- cenos6.5 python2.6.6升级至python2.7.3
踩坑无数... 一.参照以下两篇博文把python升级至python2.7.3 https://www.cnblogs.com/senzhe/p/6322214.html http://www.jb5 ...
- centos7之Java开发环境构建
CensOS7环境 我个人的博客环境如下: 希望这个教程可以帮助到linux新手朋友们或者其他在安装软件时遇到问题的朋友们 当然了,百度上也有很多类似这样的教程,我个人贴出来,一来为分享,二来以后自己 ...
- kettle(一) 安装全过程
windows 10 环境 所有资料下载 https://pan.baidu.com/s/1vYZVJ3f0QJHsCWiupSp08A 一.下载kettle pdi-ce-7.1.0.0-12.zi ...
- liMarquee – jQuery无缝滚动插件(制作跑马灯效果)
liMarquee 是一款基于 jQuery 的无缝滚动插件,类似于 HTML 的 marquee 标签,但比 marquee 更强大.它可以应用于任何 Web 元素,包括文字.图像.表格.表单等元素 ...
- 使用Java线程并发库实现两个线程交替打印的线程题
背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...
- day58
JQ高级 一.选择器 1.css语法匹配 标签 | 类 | id | 交集 群组 | 后代 | 兄弟 伪类 | 属性 2.索引匹配 :eq(index) | :gt(index) | :lt(inde ...