如何在Arm64设备上使用GDB调试x86汇编代码?
在Arm64设备上调试x86汇编代码的解决方法
核心思路
用QEMU用户态模拟x86程序,配合**多架构GDB(gdb-multiarch)**进行远程调试,避开直接运行跨架构GDB的问题。
具体操作步骤
安装多架构GDB
多数Linux发行版可直接通过包管理器安装:sudo apt install gdb-multiarch这个版本的GDB原生支持调试x86、Arm等多种架构的程序。
用QEMU启动x86程序并开启调试端口
打开终端,运行以下命令(以32位x86程序为例):qemu-i386 -g 1234 ./run-test-g 1234:让QEMU监听本地1234端口,等待GDB连接- 如果是64位x86程序,替换为
qemu-x86_64 -g 1234 ./run-test
启动GDB并连接调试会话
新开一个终端,执行:gdb-multiarch ./run-test进入GDB后,输入命令连接到QEMU的调试端口:
target remote localhost:1234之后就可以正常使用GDB调试命令了,比如设置断点
break _start、单步执行stepi、查看寄存器info registers等。
额外注意事项
- 编译x86汇编程序时,要指定x86目标架构:
32位汇编编译命令示例:as -32 test.s -o test.o ld -m elf_i386 test.o -o run-test - 你之前遇到的
cannot access memory 0x1000错误,本质是Arm64架构的GDB无法正确解析x86程序的内存布局,用多架构GDB+QEMU远程调试就能解决。
内容的提问来源于stack exchange,提问作者Nabir14
相关产品推荐
相关产品推荐

