我是一位电气工程师,最近发现需要修改MBR中的代码。基本上,我需要能够在HDD上执行代码,然后操作系统才能启动并接管。
我完全理解,这将需要用汇编语言编写,并且鉴于MBR中有446字节左右的代码空间,我只是希望调用MBR之外的其他代码。我的问题是写入MBR的最佳方法是什么?如果要更改磁盘HDD_1的MBR ...,最好将HDD_1从属另一台计算机,然后再对其进行写入,或者直接在当前计算机中(在Windows之外)对其进行写入。基本上,我认为我将插入一个呼叫,而将MBR的其余部分保留下来。
任何建议,将不胜感激
克里斯
我深知这将是困难的。我的问题是在MBR中放置指令的最佳方法是什么?不用说Windows不允许直接访问磁盘。您如何建议我将指令写入MBR?也许正在引导* nix的实时CD并从那里写入MBR吗?
最佳答案
有多种写入驱动器引导扇区的方法,并且在尝试自制操作系统开发时回用了一个通用参考:http://wiki.osdev.org/
我个人只是在linux下启动并使用dd:
先备份
dd if = / dev / sda of =〜/ windows_bootloader.bin bs = 512 count = 1
拆卸引导程序
ndisasm -b16 -o7C00h〜/ windows_bootloader.bin>〜/ windows_bootloader.asm
进行修改并重新组装
nasm〜/ windows_bootloader.asm -f bin〜/ modified_bootloader.bin
覆盖引导加载程序
dd if =〜/ modified_bootloader.bin of = / dev / sda bs = 512 count = 1
假设您的“ sda”是正确的块设备。并请注意,第4步不仅将文件复制到/ dev / sda(可以,但是如果输出二进制> 512 Bytes,则您可能不仅覆盖第一个扇区,还覆盖了更多内容)
显然,您不想在实时系统上调试此方法。使用诸如bochs,qemu或VMWare Server之类的x86模拟器将使您免于头痛。
但是,正如迈克尔·伯尔(Michael Burr)所说,这可能不是一个好主意。修改Windows引导程序可能会给您留下很少或没有空间容纳您自己的代码。