#gnu-assembler #mbr
Вопрос:
Я пытаюсь скомпилировать простой следующий 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
Однако я получаю двоичный файл размером более 129 МБ, что для меня странно. Таким образом,
Я хотел знать, что происходит в этом процессе сборки ? Большое спасибо.
Запуск objdump поверх загрузки.o дайте мне:
> 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
Кажется, что ручное удаление свойства section .note.gnu.перед вызовом ld решает проблему. Однако я не знаю, почему этот раздел отображается по умолчанию… Выполнение следующих команд сборки, по-видимому, также решает проблему:
> as --32 -o boot.o boot.s -mx86-used-note=no
> ld -m elf_i386 boot.o --oformat=binary -o mbr -Ttext 0x7c00
Комментарии:
1. Что вы видите, если вы
objdump
файл? Это должно пролить некоторый свет.2. Не могу воспроизвести в Ubuntu 20.04; мой
mbr
файл составляет 2 байта.3. Я нахожусь на ArchLinux, ассемблере GNU (GNU Binutils) 2.36.1 Раздел создается командой «как».