【问题标题】:Which assembly is used by Linux Kernel? Is it really NASM?Linux 内核使用哪个程序集?真的是 NASM 吗?
【发布时间】:2020-01-09 17:33:44
【问题描述】:

我正在阅读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

所以我认为它是用于 linux 的 NASM 程序集。我去找了https://asmtutor.com/#,它说它使用 NASM 程序集 for linux。然而,这不是一回事。仅举几例:Linux内核使用.section而不是SECTION.globl而不是global,我不知道.byte.int等做了什么。

那么 linux 使用的是哪个程序集,我在哪里可以学习呢?

【问题讨论】:

  • 内核使用 gnu 汇编器。如果您愿意,当然可以在 linux 上使用 nasm 或其他各种汇编程序。
  • 请注意,每个汇编程序都有自己的语法。

标签: linux assembly nasm


【解决方案1】:

Linux 内核使用 GAS 汇编器 (GNU Assembler),它是 GCC 的一部分。您可以在 here 上找到参考文档。

如果您已经对装配有基本的了解,您可以找到关于 GAS here 的非常全面的介绍。

对于.byte.int.byte 将跟随它的 1 个或多个 1 字节值放入当前汇编器地址的内存中,.int 执行相同操作,但使用 32 位整数而不是字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多