第五章程序i 调试和剖析详细流程

一、编译程序i流程
1.环境配置
先安装ubutun12.04 desktop版

在unbutun上面安装bochs和安装nasm,然后make即可编译第五章i程序
2.编译提示出错我们要修改的地方
(1)kernel.asm文件
凡是有hlt指令的前面必须有sti,不然会闪退,所以书中的源代码需要我们改掉
有两处
exception:
    call    exception_handler    ;0008:0003058f (unk. ctxt): call .+0x30c25
    add    esp, 4*2    ; 让栈顶指向 EIP,堆栈中从顶向下依次是:EIP、CS、EFLAGS
    ;sti;如果你要打开前面的ud2来看看异常,记得这里一定要加上sti哦,不然闪退
    hlt
%macro    hwint_master    1
    push    %1
    call    spurious_irq
    add    esp, 4
    sti;注意注意啊这是我们自己补上的,这里要补上然后重新编译内核,不补上程序会闪退,反正hlt前面必须有sti来吧IF设置成1
    hlt
%endmacro
(2)makefile文件
由于编译版本的问题,所以makefile要修改
ASMFLAGS = -I boot/include/多一个斜线啊!
改makefile的CFLAGS        = -I include -c -fno-stack-protector
二.内核分布
; 内存看上去是这样的:




三.现在来调试i程序,从kernel入手
先要跳过boot.asm跟loader.asm
;0x7d14  jmp far 9000:0100
b 0x7d14
c
b 0x90291
c
 b 0x8:0x903b2  or    b 0x8:0x903ad
n
看到 0008:00030400 (unk. ctxt): mov esp, 0x32c40就来到kernel.asm啦
等等,每一行的详细调试,请看我的笔记 ch5_i_mynote
四、心得
1、第五章程序i,这里编写了异常跟硬件终端,那个16个异常是cpu自带的,当发生异常时CPU就可以得到中断向量号了,然后去IDT里面去找,int0-int14,int16。 而硬件中断需要我们编程8259A芯片,这样当发生中断的时候CPU才会去读IDT表然后执行对应的中断处理程序,这里必须我们设置8259A,如果你不设置, 那么无论你作死的敲键盘,cpu也不会中断的,就算你已经设置了IDT表也毛用的,因为他不是异常,亲儿子就是不一样囧!注意啊这里跟高级语言的异常区别开啊 他们根本不是一回事
2.第五章程序i做的事情呢,就是至于loader.asm跟boot.asm不多说就是把我们的kernel.bin载入到内存xx位置,而kernel.bin目前做的工作就是设置GDT表跟IDT表,然后编程设置了下8259A芯片,有了16个中断,然后封装了一下,方便以后扩充好了没了

3.奇葩的地方我看了第一版跟第二版的书,hlt之前都没有sti指令,如果我不加,那么久闪退啊,连结果都看不见,xx网友说,这是因为必须开中断,方便hlt之后cpu 要恢复过来,我想说这不是的,我这不是一直让cpu发呆着吗,跟中断不中断半毛钱关系啊,为什么必须要sti指令呢,而作者却没有加,可能是我们的环境不一样吧
等有空我拿真机做实验试试在写上结果


最后附上调试和说明的代码。(郁闷啊上传代码之后要等好久才能显示连接地址,写博客好浪费时间啊,囧)。

http://download.csdn.net/detail/u011422742/9457771
ch5_i_mynote.rar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值