使用 GNU 汇编的主引导记录:平面二进制输出中的额外字节

2023-12-15

我尝试编译以下简单的 MBR:

.code16
.globl _start
.text
_start: 
end:
    jmp end
; Don't bother with 0xAA55 yet

我运行以下命令:

> as --32 -o boot.o boot.s
> ld -m elf_i386 boot.o --oformat=binary -o mbr  -Ttext 0x7c00

然而,我得到了一个超过 129MB 的二进制文件,这对我来说很奇怪。因此, 我想知道构建过程中发生了什么?非常感谢。

在 boot.o 上运行 objdump 给我:

> objdump -s boot.o
boot.o:     format de fichier elf32-i386

Contenu de la section .text :
 0000 ebfe                                 ..              
Contenu de la section .note.gnu.property :
 0000 04000000 18000000 05000000 474e5500  ............GNU.
 0010 020001c0 04000000 00000000 010001c0  ................
 0020 04000000 01000000 

手动删除该部分.note.gnu.property在调用 ld 之前似乎解决了问题。但是,我不知道为什么默认情况下会出现此部分...运行以下构建命令似乎也可以解决问题:

> as --32 -o boot.o boot.s -mx86-used-note=no
> ld -m elf_i386 boot.o --oformat=binary -o mbr  -Ttext 0x7c00

using -mx86-used-note=no带 as 标记将删除注释部分。 检查这里https://sourceware.org/binutils/docs/as/i386_002dOptions.html

-mx86-used-note=否

-mx86-used-note=是

这些选项控制汇编器是否应生成 GNU_PROPERTY_X86_ISA_1_USED 和 GNU_PROPERTY_X86_FEATURE_2_USED GNU 财产注释。默认值可以通过控制 --enable-x86-used-note 配置选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GNU 汇编的主引导记录:平面二进制输出中的额外字节 的相关文章

随机推荐