如何将。bin文件写入软盘/虚拟软盘/软盘映像的第一个扇区?
我正在尝试引导一个简单的512字节引导加载程序。每个地方的大小都显示为"512字节",所以我应该已经很好了。
附加信息:
引导加载程序只是显示一个字符串,我正在学习简单的汇编。有些工作是在Windows上完成的,有些是在Ubuntu 14.04(可信的Tahr)上完成的(如果这很重要的话)。
它不引导,即使它有引导加载程序的标志。
如果您是Linux系统,您可以使用DD实用程序。DD也有适用于Microsoft Windows的版本。
一般DD使用
如果您希望创建一个720K软盘大小的零填充虚拟磁盘映像,您可以像这样使用dd:
dd if=/dev/zero of=disk.img bs=1024 count=720
这将创建一个名为disk.img
的文件,其大小为1024*720 = 737280字节。可以使用以下命令创建一个1.44MB的零填充软盘映像:
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
并截断磁盘映像到引导加载程序的大小。
DD还能够通过跳转到磁盘开头以外的点来写入磁盘映像的特定部分。如果您需要将信息(代码/数据)放置在特定扇区中,这很有用。这个示例可用于将引导加载程序的第二阶段放在磁盘映像的第一个512字节扇区之后:
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
结束的地方截断磁盘映像。
dd if=stage2.bin of=disk.img bs=512 seek=18 conv=notrunc
这个例子与上一个类似,但是在写stage2.bin
如果您有一个附加到Linux系统的软盘(和root访问权限),您可以编写引导加载程序,如
dd if=bootload.bin of=/dev/fd0
其中/dev/fd0
是您的软盘的设备。/dev/fd0
通常是软盘A(如果存在),/dev/fd1
是软盘B(如果存在)。
DD for Windows
如果你在Microsoft Windows上运行,这里有一个版本的DD实用程序可用。最新的下载版本是dd-0.6beta3.zip,也是推荐的最低版本。它有一些老版本没有的功能。只需打开zip文件并将其解压缩到Windows路径上的某个位置。
DD为DOS
如果你在DOS中工作。我最近偶然发现了这篇文章:https://sourceforge.net/p/freedos/mailman/message/21492772/
指向这个为DOS下载的gnu工具:http://www.ibiblio.org/pub/micro/pc-stuff/freedos/gnuish/gnufut21.zip
这个命令在MS DOS 6.22中工作,将您的。bin文件写入A驱动器(使用风险自负!)
dd if=c:whereveryourbin.bin of=0:
其中bin.bin应该是512字节大小,0:应该指向您的A驱动器
听起来不错。
我曾经多次写入软盘的前512字节。我想更深入地了解这件事。
roadkill的扇区编辑器做到了这一点,它让你打开屏幕上的前512字节,并保存到一个文件,并打开一个文件与前512字节,并保存到软盘。
http://www.roadkil.net/program.php?ProgramID=24 有趣的是,有一个关于启动东西的经典网站,由一个和你名字相似的人,starman..http://starman.vertcomp.com/asm/mbr/虽然软盘是非分区介质,因此没有MBR。我确信我已经从例如Windows 98软盘中保存了前512字节,上面写着启动Windows 98然后转到C提示符。而且它还可以转换为Windows 95软盘。你知道XP可以有一个3个文件的引导盘,如果3个核心文件中的一个出现问题…它有一个独特的引导区。它不是dos引导盘。我记得XP中的格式命令与98中的格式命令不同。98版和DOS版很像,它有一个制作系统盘的格式。我认为XP真的不能…我注意到Win7格式命令也不能。虽然在XP或7中,我认为你可以通过在"我的电脑"中右键单击a后勾选一个框来从GUI中制作dos启动盘。您还可以使用*nix样式的dd命令。或者ddrescue(它提供比dd更多的信息)。一个类似的程序是Bart的BBIE,它可以获取CD的可引导部分并将其提取出来。Nero过去是(也许现在仍然是)能够获取软盘的引导扇区(512字节),并在此基础上创建CD。因此,如果您有一个可引导的DOS磁盘,您可以制作一个可引导的DOS CD。它有一个选项,可以让您浏览到带有该引导记录的映像,或者只是将软盘放入并让它提取它。
要将一个文件写入另一个文件,可以编写一个程序。下面的代码片段用c语言编写。
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);