如何在软盘/虚拟软盘/软盘映像的第一个扇区中写入.bin文件?我正在尝试 Boot 一个简单的512字节的引导加载程序。到处都显示“512字节”,所以我应该已经很好了。
其他信息:
引导加载程序只是显示一个字符串,我正在学习simpleassembly。一些工作是在Windows中完成的,一些是在Ubuntu 14.04(Trusty Tahr)中完成的(如果这很重要的话)。即使它有引导加载程序标志,它也不会 Boot 。
t3psigkw1#
如果你在Linux上,你可以用 DD 实用程序来做。也有一个用于Microsoft Windows的 DD 版本。
如果您希望创建一个720 K软盘大小的零填充虚拟磁盘映像,您可以像这样使用 dd:
dd if=/dev/zero of=disk.img bs=1024 count=720
这将创建一个名为disk.img的文件,大小为1024*720 = 737280字节。可以使用以下命令创建一个1.44MB的填充为零的软盘映像:
disk.img
dd if=/dev/zero of=disk.img bs=1024 count=1440
将二进制映像写入虚拟软盘(从映像的开头开始)的方法如下:
dd if=bootload.bin of=disk.img conv=notrunc
这个例子取文件bootload.bin,并将其放置在磁盘映像的开头(在本例中称为disk.img),而不截断(conv=notrunc)如果您不在虚拟磁盘映像上使用conv=notrunc,它将写入bootload.bin,并将磁盘映像截断为引导加载程序的大小。
bootload.bin
conv=notrunc
dd if=stage2.bin of=disk.img bs=512 seek=1 conv=notrunc
bs=512将块大小设置为512(由于这是大多数软盘扇区的典型大小,因此更容易)。seek=1查找超过映像开头的第一个块(512字节),然后写入文件stage2.bin。我们再次需要conv=notrunc,因为我们不希望 DD 在stage2.bin结束处截断磁盘映像。
bs=512
seek=1
stage2.bin
dd if=stage2.bin of=disk.img bs=512 seek=18 conv=notrunc
此示例与上一个示例类似,但在写入stage2.bin之前跳过了9216字节(512*18如果你有一个连接到Linux系统的软盘(和根访问),你可以写引导加载程序与
dd if=bootload.bin of=/dev/fd0
其中/dev/fd0是软盘的设备。/dev/fd0通常是软盘A(如果有),/dev/fd1是软盘B(如果有)。
/dev/fd0
/dev/fd1
如果您运行的是Microsoft Windows,则有一个可用的 DD 实用程序版本here。最新下载的版本是dd-0.6beta3.zip,这是推荐的最低版本。它具有一些旧版本没有的功能。只需打开zip文件并将其解压缩到Windows路径中的某个位置。
dy1byipe2#
用于DOS的DD
如果你在DOS下工作,我最近偶然发现了这篇文章:https://sourceforge.net/p/freedos/mailman/message/21492772/它指向下面下载的gnu tools for DOS:http://www.ibiblio.org/pub/micro/pc-stuff/freedos/gnuish/gnufut21.zip此命令在MS DOS 6.22中工作,用于将.bin文件写入A驱动器(使用风险自担!)
dd if=c:\wherever\your\bin.bin of=0:
其中bin.bin的大小应为512字节,0:应该指向A驱动器。
qgelzfjb3#
听起来很有趣。我以前写过很多次软盘的前512个字节,我想更深入地了解它。Roadkil的扇区编辑器可以做到这一点,它可以让你在屏幕上打开前512个字节,并将其保存到一个文件,然后打开一个文件与前512个字节,并将其保存到软盘。http://www.roadkil.net/program.php?ProgramID=24有趣的是,有一个经典的网站是关于引导东西的,由一个名字和你相似的人创建的,starman ..http://starman.vertcomp.com/asm/mbr/虽然软盘是非分区介质,因此没有MBR。我肯定我已经保存了前512字节从例如一个Windows 98软盘,它说启动Windows 98然后去了一个C提示符。它可以改变为例如一个Windows 95软盘。你知道XP可以有一个3文件 Boot 盘,如果有一个问题的3核心文件。它有一个独特的 Boot 扇区。它不是一个DOS引导盘。我记得XP中的format命令和98中的不一样。98中的像DOS中的一样,它有一个format /s来制作系统盘。我认为XP真的不能。我注意到Win7的format命令也不能。虽然在XP或7中,我认为你可以通过在“我的电脑”中右键单击A后勾选一个框来从GUI中制作一个dos Boot 盘。另一个你可以使用的命令是 *nix风格的dd命令。或ddrescue(它提供了比dd更多的信息)。一个类似的程序是Bart的BBIE,它可以获取CD的可引导部分并将其解压。Nero是(也许现在仍然是),能够从软盘的 Boot 扇区(512字节)创建一个基于它的CD。因此,如果你有一个可引导的DOS磁盘,你就可以制作一个可引导的DOS CD。它有一个选项,既可以让你浏览到带有该引导记录的映像,或者只是把软盘放进去让它解压。
jm81lzqq4#
要将一个文件写入另一个文件,你可以编写一个程序。
char buf[512]; int floppy_desc, file_desc; file_desc = open("xx.bin", O_RDONLY); read(file_desc, buf, 512); close(file_desc); floppy_desc = open("floppy.img", O_RDWR); lseek(floppy_desc, 512, SEEK_SET); write(floppy_desc, buf, 512); close(floppy_desc);
4条答案
按热度按时间t3psigkw1#
如果你在Linux上,你可以用 DD 实用程序来做。也有一个用于Microsoft Windows的 DD 版本。
一般DD用法
如果您希望创建一个720 K软盘大小的零填充虚拟磁盘映像,您可以像这样使用 dd:
这将创建一个名为
disk.img
的文件,大小为1024*720 = 737280字节。可以使用以下命令创建一个1.44MB的填充为零的软盘映像:将二进制映像写入虚拟软盘(从映像的开头开始)的方法如下:
这个例子取文件
bootload.bin
,并将其放置在磁盘映像的开头(在本例中称为disk.img
),而不截断(conv=notrunc
)如果您不在虚拟磁盘映像上使用conv=notrunc
,它将写入bootload.bin
,并将磁盘映像截断为引导加载程序的大小。bs=512
将块大小设置为512(由于这是大多数软盘扇区的典型大小,因此更容易)。seek=1
查找超过映像开头的第一个块(512字节),然后写入文件stage2.bin
。我们再次需要conv=notrunc
,因为我们不希望 DD 在stage2.bin
结束处截断磁盘映像。此示例与上一个示例类似,但在写入
stage2.bin
之前跳过了9216字节(512*18如果你有一个连接到Linux系统的软盘(和根访问),你可以写引导加载程序与
其中
/dev/fd0
是软盘的设备。/dev/fd0
通常是软盘A(如果有),/dev/fd1
是软盘B(如果有)。适用于Windows的DD
如果您运行的是Microsoft Windows,则有一个可用的 DD 实用程序版本here。最新下载的版本是dd-0.6beta3.zip,这是推荐的最低版本。它具有一些旧版本没有的功能。只需打开zip文件并将其解压缩到Windows路径中的某个位置。
dy1byipe2#
用于DOS的DD
如果你在DOS下工作,我最近偶然发现了这篇文章:https://sourceforge.net/p/freedos/mailman/message/21492772/
它指向下面下载的gnu tools for DOS:http://www.ibiblio.org/pub/micro/pc-stuff/freedos/gnuish/gnufut21.zip
此命令在MS DOS 6.22中工作,用于将.bin文件写入A驱动器(使用风险自担!)
其中bin.bin的大小应为512字节,0:应该指向A驱动器。
qgelzfjb3#
听起来很有趣。
我以前写过很多次软盘的前512个字节,我想更深入地了解它。
Roadkil的扇区编辑器可以做到这一点,它可以让你在屏幕上打开前512个字节,并将其保存到一个文件,然后打开一个文件与前512个字节,并将其保存到软盘。
http://www.roadkil.net/program.php?ProgramID=24
有趣的是,有一个经典的网站是关于引导东西的,由一个名字和你相似的人创建的,starman ..http://starman.vertcomp.com/asm/mbr/虽然软盘是非分区介质,因此没有MBR。
我肯定我已经保存了前512字节从例如一个Windows 98软盘,它说启动Windows 98然后去了一个C提示符。它可以改变为例如一个Windows 95软盘。你知道XP可以有一个3文件 Boot 盘,如果有一个问题的3核心文件。它有一个独特的 Boot 扇区。它不是一个DOS引导盘。我记得XP中的format命令和98中的不一样。98中的像DOS中的一样,它有一个format /s来制作系统盘。我认为XP真的不能。我注意到Win7的format命令也不能。虽然在XP或7中,我认为你可以通过在“我的电脑”中右键单击A后勾选一个框来从GUI中制作一个dos Boot 盘。另一个你可以使用的命令是 *nix风格的dd命令。或ddrescue(它提供了比dd更多的信息)。一个类似的程序是Bart的BBIE,它可以获取CD的可引导部分并将其解压。Nero是(也许现在仍然是),能够从软盘的 Boot 扇区(512字节)创建一个基于它的CD。因此,如果你有一个可引导的DOS磁盘,你就可以制作一个可引导的DOS CD。它有一个选项,既可以让你浏览到带有该引导记录的映像,或者只是把软盘放进去让它解压。
jm81lzqq4#
要将一个文件写入另一个文件,你可以编写一个程序。