跳到內容

equ & align & 陣列

使用範例代碼進行說明

section .data
data: db "1234"
data_len: equ $ - data
one: equ "one"

$

$在此時表示當前的記憶體位址,比如當前在0x1204,$就是0x1204
data如果是0x1200,0x1204 - 0x1200就是其長度
但這種情況$必須緊接著變數才是正確位址

equ即為C語言的define,將一個內容取代成另一個內容
比如稍後我們使用one會被取代成”one”,此動作只有取代不分配記憶體空間

使用align 16或任意數字,會將下一行的內容對齊到特定大小(byte)

section .data
pre: db "1"
align 16
data: db "1234"
data2: db "5678"

記憶體一開始有一個”1”,然後補15個0,“12345678”
align的作用範圍只有下一行而已

陣列是一段連續的記憶體空間,只要我們在數據段連續定義就是陣列

arr: dq "one", 0
dq "two", 0
; or
one: dq "one", 0
two: dq "two", 0

要注意的是任何字串丟去C/C++都需要以\0結尾
此範例dq表示一個元素是qword 8 bytes長度
接著將陣列開頭載入到暫存器,每次讀取+8或掃描到0都可以作為判斷準則