第一周:计算机是如何工作的

姓名:王玮怡  学号: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内核分析》第一周学习报告的更多相关文章

  1. LINUX内核分析第一周学习总结——计算机是如何工作的

    LINUX内核分析第一周学习总结——计算机是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...

  2. linux内核分析第一周学习笔记

    linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  3. Linux内核分析第一周学习博客 --- 通过反汇编方式学习计算机工作过程

    Linux内核分析第一周学习博客 通过反汇编方式学习计算机工作过程 总结: 通过这次对一个简单C程序的反汇编学习,我了解到计算机在实际工作工程中要涉及大量的跳转指针操作.计算机通常是顺序执行一条一条的 ...

  4. 20135320赵瀚青LINUX内核分析第一周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.概述 第一周的学习内容主 ...

  5. Linux内核分析——第一周学习笔记20135308

    第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储 ...

  6. Linux内核分析第一周学习总结:计算机是如何工作的?

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.冯诺依曼体系 ...

  7. Linux内核分析——第一周学习笔记

    20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 第一节 存储程序计算机工作模型 1.冯诺依曼体系结构:即具有存储程序的计算机体系结构.目前大多数拥有计算和存储功能的设备(智能 ...

  8. LINUX内核分析第二周学习总结——操作系统是如何工作的

    LINUX内核分析第二周学习总结——操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  9. Linux内核分析第二周学习笔记

    linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  10. Linux内核分析第二周学习博客——完成一个简单的时间片轮转多道程序内核代码

    Linux内核分析第二周学习博客 本周,通过实现一个简单的操作系统内核,我大致了解了操作系统运行的过程. 实验主要步骤如下: 代码分析: void my_process(void) { int i = ...

随机推荐

  1. arcgis pro2.3教程与问题集持续更新(一)

    Arcgis pro 2.3是64位的不支持mdb 数据库,因为微软没有开放Access64的接口,所以不能支持个人地理数据库.mdb(Microsoft Database). arcgis pro ...

  2. Alpha- 事后诸葛亮(麻瓜制造者)

    目录 预期计划 现实进展 团队体会 成员分工及工作量比例 会议总结 预期计划 在Alpha阶段开始之前,我们的预期计划是:从用户登录,发布商品.发布求购信息的基本功能开始做起.用户登录使用输入教务处的 ...

  3. UltraISO制作使用(服务器装机u盘制作)

    1.准备工作: 1)U盘一个,需要格式化(大于4G,毕竟ISO文件就已经大于4G了) 2)CentOS7.1 iso文件一个(去这里下载:http://www.centoscn.com/) 3)Ult ...

  4. Python3中遇到UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal not in range(128)

    在 linux服务器上运行代码报错: Python3中遇到UnicodeEncodeError: ‘ascii’ codec can’t encode characters in ordinal no ...

  5. 友盟推送SDK集成测试、常见问题以及注意事项总结

    最近为了解决公司APP在一些手机出现的推送问题重新集成了最新版的友盟推送SDK,花费了几天时间终于把集成和测试工作完成,最终在华为,Nexus,三星,小米,HTC,魅族等10多部手机上测试并达到了预想 ...

  6. CentOS7.5搭建Flask环境python3.6+mysql+redis+virtualenv

    wget安装环境装备 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncur ...

  7. MetaMask/eth-block-tracker

    https://github.com/MetaMask/eth-block-tracker A JS module for keeping track of the latest Ethereum b ...

  8. jenkins自动部署到tomcat报错:ERROR: Publisher hudson.plugins.deploy.DeployPublisher aborted due to exception

    参考地址: http://blog.csdn.net/weiguang1017/article/details/9011353 manager-script — Access to the tools ...

  9. STL 1–迭代器std::begin()和std::end()使用

    迭代器是一个行为类似于指针的模板类对象.只需要迭代器iter指向一个有效对象,就可以通过使用*iter解引用的方式来获取一个对象的引用.通常会使用一对迭代器来定义一段元素,可以是任意支持迭代器对象的元 ...

  10. Json.NET序列化后包含类型,保证序列化和反序列化的对象类型相同(转载)

    This sample uses the TypeNameHandlingsetting to include type information when serializing JSON and r ...