《
Linux
内核分析》第一周
.
计算机是如何工作的?
20135204
郝智宇
一、
存储程序计算机工作模型
1.
冯诺依曼体系结构:
数字计算机的数制采用二进制;计算机应该按照程序顺序执行。
内存保存指令和数据,CPU负责解释和执行这些指令。
2. API:
程序员与计算机的接口界面。
3. EIP:
CALL RET IMP
二、
X86
汇编基础
1.
X86CPU
的寄存器
E
开头
32
位,
R
开头
64
位。
堆栈是计算机中非常基础性的东西。
2.
代码段、堆栈段、数据段、附加段
3.
CPU
在实际取指令时根据
cs:eip
来准确定位一个指令。
4.
32
位和
64
位核心机制上差别不大。
5.
汇编指令:
Movl,pushl,popl,call,ret,leave…
AT&T
汇编格式与
Intel
格式略有不同。
Linux
内核使用的是
AT&T
汇编格式。
Pushl
:栈的位置在增长;
Popl
:栈的位置在收缩。
Esp
栈顶;
ebp
栈底。
Eip
不能直接被修改,只能
call,ret.
三、
汇编一个简单的
C
程序分析其汇编指令执行过程(实验楼环境下操作)
1. 新建一段代码,粘贴题目所给的代码段并进行修改之后,保存:
2. 以下为这段代码的汇编指令:
3. 删除掉以点(.)开头的指令之后,得到干净完整的汇编指令如下:
g:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
addl $5, %eax
popl %ebp
ret
f:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl 8(%ebp), %eax
movl %eax, (%esp)
call g
leave
ret
main:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl $10, (%esp)
call f
addl $1, %eax
leave
ret
4.分析汇编代码的工作过程中堆栈的变化如下:
(接上)
四.对“计算机是如何工作的”的理解:
计算机的执行指令都是机器语言,通过汇编语言和高级语言编出来的程序通过计算机内的编译程序,将程序编译成计算机可执行的文件来进行工作,交换数据。计算机在实际工作工程中要涉及大量的跳转指针操作。计算机通常是顺序执行一条一条的指令,如果有必要就通过寄存器跳转到特定的地址,再执行,然后通过一系列机制返回原有的地址,继续顺序执行。计算机里,内存保存指令和数据,CPU负责解释和执行这些指令。
郝智宇 无转载 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
时间: 2024-12-28 18:08:25