Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何更改胖引导扇区中的代码?_Windows_Assembly_X86_Osdev_Fat - Fatal编程技术网

Windows 如何更改胖引导扇区中的代码?

Windows 如何更改胖引导扇区中的代码?,windows,assembly,x86,osdev,fat,Windows,Assembly,X86,Osdev,Fat,我正在创建一个操作系统,并且能够创建一个简单的多任务内核(尽管代码已经丢失)和一个没有BIOS中断的IDE/ATA PIO驱动程序。我希望创建一个引导加载程序,将系统置于保护模式,禁用分页,创建平面内存模型,然后跳转到FAT32格式硬盘根目录中名为OS.SYS的文件的0x0偏移量。我知道怎么做,除了一件事:改变磁盘的引导扇区。我知道如何将硬盘格式化为FAT32,以便在文件开头获得正确的BPB等,但我不知道如何复制代码,以便BPB不会损坏。即使在DD可用的Linux中,我也无法克服这个障碍——我总

我正在创建一个操作系统,并且能够创建一个简单的多任务内核(尽管代码已经丢失)和一个没有BIOS中断的IDE/ATA PIO驱动程序。我希望创建一个引导加载程序,将系统置于保护模式,禁用分页,创建平面内存模型,然后跳转到FAT32格式硬盘根目录中名为OS.SYS的文件的0x0偏移量。我知道怎么做,除了一件事:改变磁盘的引导扇区。我知道如何将硬盘格式化为FAT32,以便在文件开头获得正确的BPB等,但我不知道如何复制代码,以便BPB不会损坏。即使在DD可用的Linux中,我也无法克服这个障碍——我总是使用自定义文件系统。不过,我现在看到了这样做的缺点,比如不能使用文件管理器之类的简单工具来移动文件进行测试

基本上,总而言之,我要问的是如何在一个已经在工作的FAT32文件系统上更改引导扇区代码,而不会弄乱BPB


注意:我正在使用Windows 10和NASM,并打算将虚拟硬盘与QEMU或Virtualbox一起使用。

这应该是显而易见的。从现有引导扇区读取BPB,用BPB更新引导扇区,写入修改后的引导扇区。编写一个程序来读取现有BPB,并将该BPB写入引导加载程序映像。如果处理分区媒体,则可能还需要保留分区表。我将试着编写一个程序来执行您的建议。因此,基本上我正在编写一个工具,将当前引导记录复制到汇编程序二进制输出的副本中,然后将修改后的引导记录写入diskYes,尽管您只想复制当前引导扇区的一部分(卷引导记录)。这应该是显而易见的。从现有引导扇区读取BPB,用BPB更新引导扇区,写入修改后的引导扇区。编写一个程序来读取现有BPB,并将该BPB写入引导加载程序映像。如果处理分区媒体,则可能还需要保留分区表。我将试着编写一个程序来执行您的建议。因此,基本上我正在编写一个工具,将当前引导记录复制到汇编程序二进制输出的副本中,然后将修改后的引导记录写入diskYes,尽管您只想复制当前引导扇区的一部分(卷引导记录)。