equ & align & 陣列
取得內容長度
Section titled “取得內容長度”使用範例代碼進行說明
section .datadata: db "1234"data_len: equ $ - dataone: equ "one"$
$在此時表示當前的記憶體位址,比如當前在0x1204,$就是0x1204
data如果是0x1200,0x1204 - 0x1200就是其長度
但這種情況$必須緊接著變數才是正確位址
equ即為C語言的define,將一個內容取代成另一個內容
比如稍後我們使用one會被取代成”one”,此動作只有取代不分配記憶體空間
使用align 16或任意數字,會將下一行的內容對齊到特定大小(byte)
section .datapre: db "1"align 16data: db "1234"data2: db "5678"記憶體一開始有一個”1”,然後補15個0,“12345678”
align的作用範圍只有下一行而已
陣列是一段連續的記憶體空間,只要我們在數據段連續定義就是陣列
arr: dq "one", 0 dq "two", 0; orone: dq "one", 0two: dq "two", 0要注意的是任何字串丟去C/C++都需要以\0結尾
此範例dq表示一個元素是qword 8 bytes長度
接著將陣列開頭載入到暫存器,每次讀取+8或掃描到0都可以作為判斷準則