Linux

任何 x86-64 Linux 彙程式序?

  • April 14, 2020

我想開始學習彙編語言,但所有的Google搜尋都沒有任何意義。我得到了一些Exec format error,甚至使用過wine,這不利於理解。所以我想知道是否有人能說出命令行彙程式序將在x86-64架構上做什麼,可能還有一些 Linux 的 hello world 範例?

有很多可用的彙程式序,包括:

  • gas(GCC 的一部分binutils,受 GCC 支持)——這在任何地方都可以使用,並且使用 AT&T 風格;
  • NASM(在你的發行版中尋找一個nasm包)——它支持 Intel 風格的助記符;
  • Yasm是對 NASM 的重寫(查找yasm包)。

這是一個“Hello world” gas

   .global _start

   .text
_start:
   mov     $1, %rax
   mov     $1, %rdi
   mov     $hello, %rsi
   mov     $13, %rdx
   syscall

   mov     $60, %rax
   xor     %rdi, %rdi
   syscall

hello:
   .ascii  "Hello, world\n"

將此保存到hello.S,並使用gcc -c hello.S && ld -o hello hello.o.

NASM 的等價物是:

   section .text
   global  _start

_start:
   mov     rax, 1
   mov     rdi, 1
   mov     rsi, hello
   mov     rdx, len
   syscall

   mov     rax, 60
   xor     rdi, rdi
   syscall

   hello   db "Hello, world",0x0A
   len     equ $ - hello

將此另存為hello.asm,並使用nasm -felf64 hello.asm && ld -o hello hello.o.

引用自:https://unix.stackexchange.com/questions/305443