免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2623 | 回复: 9
打印 上一主题 下一主题

[内核入门] 0x7c00的疑惑, 还望各位高手不吝赐教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-09 15:32 |只看该作者 |倒序浏览
大家好!

我在学习《Linux内核完全注释》时对bootsect.s中的0x7c00不是很了解,后在网上查找资料说是BIOS在自检后会产生中断 INT 19H把硬盘上的MBR读取到内存的0x7c00处,然后跳转到0x7c00处执行,我用bochs在0x00007c00处设了断点,里面的汇编代码确实是硬盘镜像的前446个字节的信息,即MBR;
但我将启动盘设为软盘后,再设置断点在0x00007c00处, 结果执行的汇编代码与软盘镜像开始的446个字节对不上,而是软盘中路径 boot/grub/stage1 这个镜像里面的代码,我的疑问如下:
1、 BIOS在检测到软盘启动后是否也产生中断 INT 19H(或其他中断), 将软盘的MBR(不知软盘前446个字节是否也叫MBR)读取到内存0x7c00处?
2、 如果不是读取到0x7c00处,那是什么地址呢?
3、 用软盘启动的话是否也是从软盘的前446个字节开始执行?
4、 软盘的0磁头0磁道1扇区是否也保存的引导代码? 他们也叫MBR吗?

这个问题困扰了我好久也没头绪,还望各位大侠帮帮小弟,万分感谢!!

论坛徽章:
0
2 [报告]
发表于 2012-11-09 15:58 |只看该作者
自己顶一下

论坛徽章:
0
3 [报告]
发表于 2012-11-09 19:05 |只看该作者
继续顶一下

论坛徽章:
0
4 [报告]
发表于 2012-11-10 19:18 |只看该作者
无论是什么启动方式。都是将启动盘的第一扇区的512字节复制到7c00.而不是466.你那个问题可能是你的启动软盘没做好。在用dd试一遍。

论坛徽章:
0
5 [报告]
发表于 2012-11-12 08:40 |只看该作者
首先非常感谢您的回复,我说的466可能引起了您的误解,拷贝的确实是0磁头、0磁道、1扇区的512字节,里面的466个字节是引导代码,后66个自己是磁盘分区表和magic数,但不管引导盘做的如何,bios应该总是把前512个字节拷贝到0x7c00处,然后在0x7c00处执行吧? 那用bochs在0x7c00处设断点的话应该执行的是那512字节中的第一条指令吧? 但我用反汇编程序看了466字节的引导程序,发现与断点处的不一样,所以就不知道是什么原因了

论坛徽章:
0
6 [报告]
发表于 2012-11-12 12:16 |只看该作者
这个 把你的代码 弄上来看看。发几个截图吧。然后就是 dd 的代码弄上来看看

论坛徽章:
0
7 [报告]
发表于 2012-11-12 15:51 |只看该作者
没有代码哦,是网上下载的一个开发环境,我刚才试验了一下,发现好像是软盘镜像文件导致的问题
我的实验环境如下:
1. 下载0.11 bochs开发环境 http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040809.zip
2. 用附件中的软盘镜像当做A盘,并配置成软盘启动
3. 设置断点为 b 0x7c00
4. 看到 7c00 处的汇编代码为 jmp .+0x0048
5. 反汇编附件软盘镜像的前512个字节,显示第一条指令为 jmp 004A
不知道这个是什么原因

PS:附件的软盘镜像是另一个开发环境里面的,那个开发环境在哪下载的我忘记了,是一个自解压的开发环境,里面就是这个软盘镜像,通过grub引导

grubdos.rar

133.87 KB, 下载次数: 4

另一个开发环境的软盘镜像

论坛徽章:
0
8 [报告]
发表于 2012-11-12 23:59 |只看该作者
本帖最后由 要有上进心 于 2012-11-13 00:01 编辑

这个你直接把你的 代码编译成 bin文件 ,然后用 DD这个软件。在window 和linux都有。不过我建议你用linux系统

你这个前面的是磁盘描述符。 jmp .+0x0048这个转跳到你的代码处。

你可以用winhex软件直接把 bin写到软盘镜像的 mbr。 dd.zip (172.28 KB, 下载次数: 1)

论坛徽章:
0
9 [报告]
发表于 2012-11-13 09:19 |只看该作者
兄弟,谢谢你的热心帮助!

关于引导代码与执行代码不一致的现象,即我上面说的
4. 看到 7c00 处的汇编代码为 jmp .+0x0048
5. 反汇编附件软盘镜像的前512个字节,显示第一条指令为 jmp 004A

按理说应该是bios把软盘镜像的前512字节拷贝到0x7c00处,然后执行,但这里对不上,肯定是和软盘镜像有关,但怎么有关我就不知道了,兄弟有何看法?

论坛徽章:
0
10 [报告]
发表于 2012-11-13 12:09 |只看该作者
本帖最后由 要有上进心 于 2012-11-16 14:52 编辑

这个。zzzzzzzzzzzzzzz
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP