Какая сборка используется ядром Linux? Это действительно NASM? - PullRequest
0 голосов
/ 09 января 2020

Я читаю https://0xax.gitbooks.io/linux-insides/content/Booting/linux-bootstrap-1.html и там читается какая-то сборка вроде

    .section ".reset", "ax", %progbits
    .code16
.globl    _start
_start:
    .byte  0xe9
    .int   _start16bit - ( . + 2 )
    ...

Есть строка, где он компилируется вот так

nasm -f bin boot.nasm && qemu-system-x86_64 boot

Так что я это была сборка NASM для linux. Я пошел и нашел https://asmtutor.com/#, который говорит, что он использует сборку NASM для linux. Однако это не одно и то же. Вот несколько примеров: linux ядро ​​использует .section вместо SECTION, .globl вместо global, и я не узнаю, что делает .byte, .int, et c.

Итак, какую сборку использует linux и где ее можно узнать?

1 Ответ

4 голосов
/ 09 января 2020

В ядре Linux используется ассемблер GAS (GNU Assembler), который является частью G CC. Справочную документацию вы можете найти на здесь .

Вы можете найти довольно подробное введение в GAS здесь при условии, что у вас уже есть базовое c понимание сборки в целом.

Что касается .byte и .int, .byte помещает 1 или более 1-байтовых значений, следующих за ним, в память по текущему адресу ассемблера, а .int делает то же самое, но для 32-битных целых чисел вместо байтов.

...