所以,我有这个汇编文件,我用 GNU as 汇编它并使用链接器脚本与 GNU ld 链接。
链接描述文件 ( boot.ld
):
INPUT(boot.o)
OUTPUT(boot.out)
ENTRY(boot_start)
SECTIONS {
. = 0x7c00;
.text : { *(.text) }
.data : { *(.data) }
. = 0x7dfe;
.boot_end : { *(.boot_end) }
}
如您所见,我尝试通过执行. = 0x7cdfe
. .boot_end
包含引导签名,因此会填满剩余的两个字节。
我按如下方式创建引导加载程序:
m4 boot.S | as -o boot.o
ld -T boot.ld
objcopy -O binary boot.out boot.img
boot.out
包含已经具有绝对地址的部分,一切似乎都很好。.boot_end
是在0x7dfe
,我希望这些孔用零填充,但不,boot.img
总共是 55 个字节。对我来说,奇怪的是该文件甚至不包含引导签名。它只是没有任何一个.text
或跳过的字节。.data
.boot_end
如何移动 ld 以跳过这些字节?我的引导签名到哪里去了?