数据段:带有初始值的数据
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