《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 = ...
随机推荐
- PyQt5--ToolBar
# -*- coding:utf-8 -*- ''' Created on Sep 14, 2018 @author: SaShuangYiBing ''' import sys from PyQt5 ...
- PyQt5--CloseWindow
# -*- coding:utf-8 -*- ''' Created on Sep 13, 2018 @author: SaShuangYiBing ''' import sys from PyQt5 ...
- [eclipse]添加python默认模板,在首行添加编码方式(# -*- coding: utf-8 -*-)
1.从eclipse的windows->preference 2.参照如下图,添加指定的utf-8编码方式
- 借助强大的IDEA开发ide高效实现equals,hashcode以及toString方法
IDEA工具提供多种生成hashCode与equals的代码方案,注意:尽量不要使用第一个方案,第一个方案对于null不做判空处理,容易NNP问题. 对于生成toString方法方案,默认使用的是+拼 ...
- Integer、String、StringBuffer、StringBuilder
Integer Interger 是int基本数据类型的包装类,在Integer内部封装了一个final int value的属性. 构造方法: Integer类提供了两种构造方法:它们都会返回一个I ...
- css里颜色的那些事儿(合法颜色值)
css中主要有六种方法指定颜色: 1.十六进制颜色 2.RGB颜色 3.RGBA颜色 4.HSL色彩 5.HSLA颜色 6.预定义/跨浏览器的颜色名称 前三种是我们最常见的,也是用的最多的,而后三种对 ...
- linux 的常用命令---------第八阶段
raid 磁盘阵列-------raid 0 raid1 raid5 raid10 mdadm 命令常用参数 ...
- linux网络工具iproute2的使用简介
一.写本文的目的 本文完全是自己在学习iproute2的过程中搜集的大杂烩,记录在这里,方便以后自己查询学习,图片都是来自网络,在此表示感谢! 二.简单了解iproute2工具套装 iproute2是 ...
- Arthas开源项目
本文主要围绕着Arthas是什么.能做什么.安装和使用等三个方面内容来讲解,希望对初学者和对此有兴趣的朋友有帮助. 一. Arthas是什么 文档地址: https://alibaba.github. ...
- Python2.7-datetime
datetime 模块用于操作日期时间模块内定义了5个类:date,time,datetime,timedelta,tzinfo 1.timedelta对象,代表一个时间间隔datetime.time ...