万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 实验部分(反汇编简单的C程序) 代码: int g(int x) { return x + 6; } int f(int x) { return g(x); } int main(void) { return f(4) + 8; } 最后结果应为18 在Code下新建main.c 进行编译和反编译 反编译结果如…
实验部分 使用gcc -S -o main.s main.c -m32命令将源代码编译成汇编代码. 源代码如下: int g(int x) { return x + 9; } int f(int x) { return g(x); } int main(void) { return f(18) + 11; } 编译后的代码如下: g: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax addl $9, %eax popl %ebp ret f: push…
实验部分 (以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码, int g(int x) { return x + 6; } int f(int x) { return g(x); } int main(void) { return f(13) +2; } 1. 实验截图 复制代码到实验楼 编译,打开main.s(打开前忘记截图,改完后截的图) 删完冗余部分,剩下的汇编代码…
马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.计算机是如何工作的 (一)什么是冯诺依曼体系结构 冯诺依曼体系结构:就是指存储程序计算机. 1.  从硬件角度: 存储程序计算机工作模型: 2.  从程序员角度: CPU抽象成for循环. (二)API:程序员与计算机的接口界面. ABI:程序与CPU的接口界面. (1)汇编指令. (2)约定使用怎样的寄存器. (3)大多数指令可…
1.冯诺依曼体系结构:也就是指存储程序计算机 硬件(存储程序计算机工作模式): 软件(程序员角度): 2.API:程序员与计算机的接口界面 ABI:程序与CPU的接口界面 3.X86的实现: 4.X86 CPU的寄存器: 所有E开头的寄存器一般来说都是32位的. EBP:堆栈基址指针 ESP:堆栈顶指针 32位通用寄存器: 5.CPU在实际取指令时根据cs:eip来准确定位一个指令 6.EFLAGS register标志寄存器 7.X86的32位寄存器和64位寄存器在核心机制上差别不大,前面带R…
万子惠 + 原创作品转载请注明出处 + <Linux内核分析> 实验部分 使用实验楼的虚拟机打开shell 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain.c和myinterrupt.c my_time_handler(调用printk //实际时会做一些中断处理) my_start_kernel(进行硬件初始化的工作) 总结部分 来自老师的计算机是如何工作的总结--三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运…
mykernel实验指导(操作系统是如何工作的) 实验要求 运行并分析一个精简的操作系统内核,理解操作系统是如何工作的 使用实验楼的虚拟机打开shell cd LinuxKernel/linux-3.9.4 qemu -kernel arch/x86/boot/bzImage 然后cd mykernel 您可以看到qemu窗口输出的内容的代码mymain.c和myinterrupt.c 实验截图 首先是 然后是 之后是 要建立一个简单的时间片轮转多道程序,按照实验楼给的链接,找到了几个源代码,如…
一个简单的时间片轮转多道程序 操作系统的"两把剑":中断上下文(保存现场和恢复现场)和进程上下文的切换 源代码的分析 *使用的源代码为视频中所使用的精简内核的源代码 首先分析mypcd.h struct Thread { unsigned long ip;//point to cpu run address unsigned long sp;//point to the thread stack's top address //todo add other attrubte of sy…
“平安的祝福 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 一.初始化进程 操作系统内核启动入口函数是void __init my_start_kernel(void): 在这里简单定义进程的的两个cpu状态: struct Thread {    unsigned long        ip; //表示eip指令    unsigned long        sp;/…
益西拉姆+ 原创作品+ <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 堆栈 堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间,包括: (也就是说CPU内已经集成好了一些功能) 函数调用框架 传递参数(在32位的机器中,64位的略有不同) 保存返回地址(%eax中可以保存返回地址或者返回值) 提供局部变量空间 堆栈相关的寄存器 在一二讲的文档中,都告诉我们地址是向低地址端增长的.那么,该讲中的图示为…