随笔分类 -  SunnyOS

GDT/IDT
摘要:全局符号与弱符号之间的区别主要有两点: (1). 当链接编辑器组合若干可重定位的目标文件时,不允许对同名的 STB_GLOBAL 符号(全局变量)给出多个定义。 另一方面如果一个已定义的全局符号已经存在,出现一个同名的弱符号并不会产生错误(强弱附后存在,取强)。链接编辑器尽关心全局符号,忽略弱符号。 阅读全文

posted @ 2017-08-21 23:16 chaunceyctx 阅读(662) 评论(0) 推荐(0)

调试信息的完成
摘要:gdb中-x是为了实现通过文件的初始化gdb GAS(gcc)(AT&T 语法),NASM(Intel 语法) 当boot loader 引导操作系统的时候,机器必须有如下的状态: EAX: 必须包含魔数OX2BADB002,这个值告诉操作系统目前它是由兼容的Multiboot 的boot load 阅读全文

posted @ 2017-08-18 22:49 chaunceyctx 阅读(316) 评论(0) 推荐(0)

vsprintf解析
摘要:printf函数: 栈是从内存的高地址向低地址生长的,函数参数压栈顺序是从右到左,printf的第一个参数就是那个字符指针即为被双引号括起来的那一部分,函数通过判断字符串里控制参数的个数(%5.4lf等等)来判断参数个数及数据类型。例如printf("%d,%d",a,b);汇编代码为: 参数是最后 阅读全文

posted @ 2017-08-16 12:27 chaunceyctx 阅读(6166) 评论(0) 推荐(0)

带grub的软盘镜像制作
摘要:以下在ubuntu16.04(一定要root模式下(sudo -s)下测试通过 dd if=/dev/zero bs=512 count=2880 of=floppy.img 为了方便我们需要在镜像文件中建立文件系统,有了文件系统才比较方便放置、修改我们自己的内核和应用程序。 首先将软盘镜像与某个 阅读全文

posted @ 2017-08-14 17:04 chaunceyctx 阅读(953) 评论(0) 推荐(1)

SunnyOS准备4
摘要:8086 CPU一般是这样:CS寄存器初始化为0xF000,IP寄存器初始化为0xFFF0,所以按照CPU实模式地址计算法则,CPU执行的第一条指令地址是CS*10h+IP,即0xFFFF0处 对于80386以上的CPU: 第一点,80386及其以上的现代CPU(以下简称CPU)加电Reset之后并 阅读全文

posted @ 2017-08-10 15:24 chaunceyctx 阅读(193) 评论(0) 推荐(0)

SunnyOS准备3
摘要:gcc编译链接分解: 主要过程为: 预处理(preprocess) > 编译(compilation) > 汇编(assembly) > 链接(linking) gcc指令: -E:表示只执行预处理(preprocess) -S:执行预处理和编译 -o:表示输出文件 -c:表示预处理,编译和汇编操作 阅读全文

posted @ 2017-08-09 22:59 chaunceyctx 阅读(170) 评论(0) 推荐(0)

SunnyOS准备2
摘要:Makefile: 我们如何编译链接程序,很简单按F9或ctrl+F5,这是绝大多数IDE帮我们做的工作,但是在unix系统下却没有这么幸运,当我们要编译链接程序时,我们使用gcc编译器: 实际上:gcc test.c -o test一步就可,上面只是对其的拆解 但是对于多个文件(一个大型项目来说) 阅读全文

posted @ 2017-08-09 14:39 chaunceyctx 阅读(176) 评论(0) 推荐(0)

SunnyOS准备1
摘要:AT&T语法汇编和Intel语法汇编比较: 1. 前缀: ①在AT&T语法中,寄存器以'%'为前缀,立即数则以'$'为前缀,而Intel语法中则没有; ②在Intel语法中,十六进制立即数以'h'结尾,二进制立即数则以'b'结尾。另外对于编译器来说,十六进制立即数不能以字符a~f打头,需要在前面上加 阅读全文

posted @ 2017-08-07 23:16 chaunceyctx 阅读(223) 评论(0) 推荐(0)

导航