數據段:帶有初始值的數據
bss段:初始值爲0(NULL)的數據
文本段:代碼
--------------------------------------------------
_start
.globl
--------------------------------------------------
CPUID指令:
根據EAX輸出CPU信息到EBX,ECX,EDX
--------------------------------------------------
STDOUT的文件描述符爲1
--------------------------------------------------
int $0x80
eax=4 write函數
eax=1 exit函數
--------------------------------------------------
as,gcc都可以編譯彙編源文件
as以_start爲入口
gcc以main爲入口
--------------------------------------------------
在GDB中對彙編設斷點 :
break * label+offset
由於GDB的bug在_start標籤後加一條nop指令,然後break * _start+1
--------------------------------------------------
info registers -->i r
--------------------------------------------------
print $eax 默認爲十進制 -->p $eax
print/d $eax 十進制 -->p/d $eax
print/t $eax 二進制 -->p/t $eax
print/x $eax 十六進制 -->p/x $eax
--------------------------------------------------
x/nyz:顯示內存特定位置的值
n:字段數 #默認1
y:格式 c 字符/d 十進制/x 十六進制 #默認16
z:字段長度 b 8位/h 16位/w 32位 #默認32
x/42cb &output
x/d &value
--------------------------------------------------
.ascii 末尾不加空字符(0,NULL)
.asciz 末尾加空字符(0,NULL)
--------------------------------------------------
彙編調用c庫
ld -o AAA -lc BBB.o #-lc : /lib/libx.so --> /lib/libc.so #這個是導入庫
ld -dynamic-linker /lib/ld-linux.so.2 -o AAA -lc BBB.o