我是一名电气工程师,最近发现需要修改MBR中的代码。基本上,我需要在硬盘上执行代码的能力,然后操作系统启动并接管。
我完全理解这将需要用汇编语言编写,并且考虑到MBR中446字节左右的代码空间,我只希望调用MBR之外的其他代码。我的问题是,写入MBR的最佳方式是什么?如果我想改变磁盘HDD_1的MBR...最好是将HDD_1从到另一台机器上然后再写入,还是在当前机器中直接写入(在windows之外)。基本上,我认为我将插入一个调用,而不去管MBR的其余部分。
如有任何建议,我们将不胜感激
克里斯
我很清楚这将是一件困难的事情。我的问题是,在MBR中放置指令的最佳方式是什么?不用说,Windows不允许直接访问磁盘。您建议我如何将指令写入MBR?是不是启动了一张*nix的live CD并从那里写入MBR?
发布于 2009-02-20 09:16:02
有多种写入驱动器引导扇区的方法,我在尝试开发自制操作系统时使用了一个通用的参考:http://wiki.osdev.org/
我个人只是在linux下启动并使用dd:
首先进行
dd if=/dev/sda of=~/windows_ bootloader .sda bs=512 count=1
~/windows_bootloader.asm
nasm ~/windows_bootloader.asm ~/modified_bootloader.bin
dd if=~/modified_bootloader.bin of=/dev/sda bs=512 count=1
这假设'sda‘是正确的块设备。请注意,步骤4并不只是将文件复制到/dev/sda (它可以这样做,但是如果输出二进制文件> 512字节,那么您可能会覆盖超过第一个扇区)
显然,您不会想要在实时系统上调试这种方法。使用bochs、qemu或VMWare服务器之类的x86仿真器会让你省去很多麻烦。
然而,正如Michael Burr所说,这可能是一个坏主意。修改Windows引导加载程序,可能会给您自己的代码留下很少甚至没有空间。
发布于 2009-02-20 05:15:16
BIOS通过读取每个引导设备的第一个扇区(512字节)并检查一组特定的签名字节,从硬盘(或软驱)引导计算机。如果找到这些字节,则将512字节的扇区复制到ram (在特定位置),并且BIOS跳转以运行它。
除了签名字节,扇区中的446字节可供您用作引导程序,但引导程序必须完全适合该扇区!因为446字节不是很大,所以你必须调用BIOS来从硬盘驱动器(或软盘驱动器,或其他驱动器)复制其他扇区到ram中才能运行这些扇区。
一旦你已经加载了足够的内存来运行你的程序,跳转到它,你就可以开始工作了。
这就是一个操作系统是如何“靠自己的引导程序把自己拉起来”的。
请参阅http://en.wikipedia.org/wiki/Master_boot_record
现在,你没有理由不能用C或C++ (或大多数其他语言)编写引导代码,除了使用汇编,你可以确切地知道将生成什么代码,并且很容易进行BIOS调用。
我建议你写一个512字节的磁盘驱动器到ram复制器,它会把你的程序从磁盘加载到ram中,然后跳转到你程序的起始地址。然后你可以用你想要的任何语言来编写你的程序。请记住,当您的引导代码开始运行时,这512个字节是您在ram中唯一可以依靠的东西。(好的,BIOS在那里,您可以进行BIOS调用。BIOS还会将一些系统信息放在内存中的某些位置...)如果你想调用你写的任何在这个扇区之外的函数,你必须自己把它们加载到ram中。
此外,测试代码的最简单方法可能是将其放在软盘上并从软盘启动。
要回答你原来的问题,你可以在某个地方保留一个旧的MBR的备份副本,而你的新的MBR可以将你的函数加载到ram中,运行它,然后加载原始的MBR并运行它,从而允许windows继续引导。
此外,Michael Burr是对的,完成你想要做的事情将是一场噩梦。
为了回答你关于如何在硬盘上实际写入的评论,有几个“原始写入”程序可以复制到磁盘上的一个扇区。此外,您还可以从linux live cd启动,然后使用dd将数据写入您选择的块设备上的扇区。--就像馅饼那部分一样简单。
发布于 2009-02-20 05:25:47
基本上,我认为我将插入一个调用,而不去管
的其余部分
此子例程调用将调用什么?此时,内存中唯一的代码是MBR或ROM中的任何代码。
在你花太多时间在它上面之前,请仔细考虑你是否真的需要它,或者没有更好的替代方案。写入MBR (而不是OS加载程序放入其中的MBR )的第三方代码通常不会被用户很好地接受,因为:
因此,如果你决定继续走这条路,请谨慎行事,并为令人头疼的事情做好准备。
https://stackoverflow.com/questions/568359
复制相似问题