我尝试编译以下简单的 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(使用前将#替换为@)