适用于 Linux x86 64 的 Hello world(Intel 64 位)

section .data
    msg db "Hello world!",10      ; 10 is the ASCII code for a new line (LF)

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, 13
    syscall
    
    mov rax, 60
    mov rdi, 0
    syscall

如果要执行此程序,首先需要 Netwide Assemblernasm,因为此代码使用其语法。然后使用以下命令(假设代码位于文件 helloworld.asm 中)。它们分别用于组装,链接和执行。

  • nasm -felf64 helloworld.asm
  • ld helloworld.o -o helloworld
  • ./helloworld

该代码使用了 Linux 的 sys_write 系统调用。在这里, 你可以看到 x86_64 架构的所有系统调用列表。当你还将写入退出的手册页考虑在内时,你可以将上述程序转换为 C 语言,它可以执行相同操作并且更具可读性:

#include <unistd.h>

#define STDOUT 1

int main()
{
    write(STDOUT, "Hello world!\n", 13);
    _exit(0);
}

这里只需要两个命令来进行编译和链接(第一个)和执行:

  • gcc helloworld_c.c -o helloworld_c
  • ./helloworld_c