自由使用内存的 Bug
这是我有史以来遇到的最恐怖的 Bug: 我把正在执行的代码给擦掉了~~~
系统中断服务表 IDT 需要 2K 空间,不想在程序中定义,就想着直接使用空余的内存空间。鬼使神差的想到 BOOT(7C00h)和内核代码(8000h)之间还有一段空区,就用上了。根本不注意到这段空区(7E00h – 7FFFh) 和 BOOT 一样只有 512 (0.5K) 字节。于是等我傻里傻气的清零 2K 的内存时,内核代码被清零了(7E00h + 2K > 8000h),包括正在执行这段清零操作的代码。QEMU 模拟器报错,弹出对话框来。天啊,不晓得在真是机器上执行会怎样,幸好有模拟器,庆幸!
昨天一晚上都牵挂着浅浅 x_x ,没有心思研究为什么有怎么严重的出错。后来便放弃了清零操作,只是对 INTEL 保留异常向量表进行处理,也就是 0 – 31 号的 256 个字节。呵呵。这样子没有影响到内核的代码,于是乎,发布了 ANOS 0.03 赶着好安心睡觉。
奇怪的是,早晨醒来时,不知为什么想起这个来。突然一下明白 7E00h 到 7FFFh 根本不到 2K 空间。。。
😀 真的是真的是很恐怖的错误!
发表评论