# debug

可以使用 qemu 的 - g 指定端口

$ qemu-aarch64 -g 1234 -L /usr/aarch64-linux-gnu ./apollo

然后使用 gdb-multiarch 进行调试,先指定架构,然后使用 remote 功能

在另外一个终端(上一个你也用不了)打开 gdb -multiarch

$ gdb-multiarch ./apollo -q

然后连接到端口进行远程调试

gdb-peda$ set architecture aarch64
The target architecture is assumed to be aarch64
gdb-peda$ target remote localhost:1234
Remote debugging using localhost:1234

# ARM

# RISC-V

name ABI 助记符 用途
x0 zero zero
x1 ra 返回地址
x2 sp 栈指针
x3 gp 全局指针
x4 tp 线程指针
x5-x7 t0-t2 临时寄存器
x8-x9 s0-s1 callee 保存的寄存器
x10-x17 a0-a7 参数寄存器
x18-27 s2-s11 callee 保存的寄存器
x28-x31 t3-t6 临时寄存器

在参数保存之后,通过 jal 指令跳转到函数开始执行。jal 指令的规范为:

jal ra, offset

将会把下一条指令 (pc+4) 地址存放到 ra 寄存器中,然后跳转到当前地址 + offset 位置开始执行。
在子函数中,将会把 ra 寄存器存放到栈上,在函数返回时从栈上恢复 ra 寄存器,这里也就 存在栈溢出的机会

更新于

请我喝[茶]~( ̄▽ ̄)~*

Walt CSZ 微信支付

微信支付

Walt CSZ 支付宝

支付宝