在此记录下寄存器的名称及作用,方便查看。
不同体系下寄存器名称:
|63..32|31..16|15-8|7-0|
|AH..AL..|
|AX......|
|EAX...........|
|RAX...................|
不同寄存器作用:
rax 作为函数返回值使用
rsp 栈指针寄存器,指向栈顶
rdi,rsi,rdx,rcx,r8,r9 用作函数参数,依次对应第1参数,第2参数...
rbx,rbp,r12,r13,14,15 用作数据存储,遵循被调用者使用规则,简单说就是随便用,调用子函数之前要备份它,以防他被修改
r10,r11 用作数据存储,遵循调用者使用规则,简单说就是使用之前要先保存原值
参考:
https://msdn.microsoft.com/zh-cn/library/9z1stfyw.aspx
http://www.mouseos.com/x64/extend64.html
另附上CSAPP实验里用到的GDB常用命令,方便查阅。
-objdump -d a.out>a.s 生成反汇编文档
gdb a.out 进入gbd
b *0x400000 设置断点
d 1 删除断点1
c 继续,跳过当前断点
info r 寄存器状态信息
info b 断点列表
p *0x400000 打印地址处双字(32bit)
p/x 16进制打印
p/s 0x400000 打印地址处字符串
p/s *(char *)($rac) 打印地址处字符
p/s (char *)($rac) 打印地址处字符串