跳到內容

第一個程式

先看看基本的Hello World! 範例

global _start
section .data
hello: db "Hello World!",10
section .text
_start:
mov rax, 1 ; 1=sys_write
mov rdi, 1 ; 1=stdout
mov rsi, hello
mov rdx, 13
syscall
mov rax, 60 ; 60=sys_exit
xor rdi, rdi
syscall

將上述代碼保存成.asm

程式碼變成可執行檔有兩個動作

將我們的文字程式碼轉換成目的檔的過程

Terminal window
nasm -f elf64 filename.asm -o filename.o

這邊我們指定了輸出格式是linux的64位元可執行檔elf64

一個程式可能用到許多函式庫,例如libc
大部分程式採用動態鏈結的方式,執行時再去找.dll/.so,而靜態鏈結則是將函式庫綁定到程式
link的動作除了鏈結外部庫,還有重定位等內容將半成品的目的檔做成可執行檔

Terminal window
ld filename.o -o filename

在linux shell執行當前目錄下的文件需要加上./開頭

Terminal window
./filename

現在應該順利輸出Hello World!\n了