首页 技术 正文
技术 2022年11月17日
0 收藏 758 点赞 3,425 浏览 1539 个字

《Linux内核原理与分析》第二周作业


一.上周问题总结:

  • 未能及时整理笔记
  • Linux还需要多用
  • markdown格式不熟练
  • 发布博客时间超过规定期限

二.本周学习内容:

《庖丁解牛Linux内核分析》第一章

2.1 汇编语言的学习与实践

汇编语言, 即第二代计算机语言,用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用“ADD”代表数字逻辑上的加减,“ MOV”代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便。

在实验楼配套实验1中,我们使用vim编辑器编辑main.c程序,代码如下:

int g(int x)
{
return x + 3;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(8) + 1;
}

在“实验楼”的虚拟机环境下粘贴代码并保存:

编译main.c代码文件,查看程序返回值,再将其编译成以“.s”作为扩展名的汇编代码文件,代码如下:

#编译C语言代码文件
gcc main.c
#执行a.out可执行文件
./a.out
#输出程序返回值
echo $?
#将c语言程序编译为main.s汇编文件
gcc –S –o main.s main.c -m32
#用vi方式打开汇编文件
vi main.s

具体效果如下:

打开后的源码非常繁冗且复杂:

#在命令模式下取除"."开头的辅助信息
g/\.s*/d

简化后的清爽代码如下:

2.2 云班课视频《计算机是如何工作》

这部分课程主要涉及到了冯诺依曼体系结构,或称为存储程序计算机、从硬件角度和程序员的角度对计算机中内存与CPU之间关系的理解、API——程序与计算机的接口界面、ABI——程序与CPU的接口界面、16位和32位以及64位的X86体系结构的寄存器,其中印象最深的是堆栈指针、段寄存器和EIP等。

  • 通用寄存器

    EAX:累加器

    EBX:基地址寄存器

    ECX:计数寄存器

    EDX:数据寄存器

    EBP:堆栈基址针

    ESI、EDI:变址寄存器

    ESP:堆栈顶指针

  • 段寄存器

    CS:代码段寄存器。

    DS:数据段寄存器。

    ES:附加段寄存器。

    SS:堆栈段寄存器。

    FS:附加段寄存器。

    GS:附加段寄存器。

  • mov指令及寻址方式,其中l指32位,b指8位,w指16位,q指64位,如下表展示:
指令 相当于 寻址方式
movl %eax %edx edx=eax 寄存器寻址,以%开头的寄存器标识符
movl $0x123 %edx edx=0x123 立即寻址,立即数以$开头的数值
movl $0x123 %edx edx=*(int32_t)0x123 直接寻址,直接访问一个指定的内存地址的数据
movl (%ebx)%edx edx=(int32_t)ebx 间接寻址,将寄存器的值作为一个内存地址来访问内存
movl 4(%ebx)%edx edx=(int32_t)(ebx+4) 变址寻址,在间接寻址之时改变寄存器的数值

三.总结与疑难

本次Linux学习主要学习了计算机冯·诺依曼体系结构、计算机CPU工作原理以及汇编语言执行过程中堆栈的变化情况,了解到寄存器的分类,以及寄存器的用处.学习了一些底层的调用。学会了如何将C语言转化为汇编语言。

QUSTION:

  • 对于堆栈指针,在本科数据结构课程的时候已经有过相关的编程与实践,但是却没有真正在汇编中进行过相关的操作,关于汇编代码的工作栈分析看得还不透彻
  • 工作栈变化状态图因时间原因还未完成
  • 按照课本步骤,在保存并退出文本编辑器时候,按“shift”+“:”,并不能进入命令模式。后询问同学,发现需要先按esc退出编辑模式

四.下周计划安排

  • [ ] Linux还要多用,下周得配置好电脑环境与虚拟机,摆脱实验楼
  • [ ] 完成书本上的课后习题
  • [ ] 补完汇编代码的工作栈分析图

2019 年 09月 22日

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,086
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,561
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,410
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,183
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,820
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,903