如何在最新macOS上通过QEMU运行调试Linux ARM64汇编代码?
在最新版macOS上调试ARM64裸机程序(QEMU + GDB)
1. 安装正确的工具链
用Homebrew安装所需工具:
- 安装ARM64交叉编译工具链:
brew install aarch64-linux-gnu-binutils aarch64-linux-gnu-gcc - 安装QEMU的ARM64模拟器:
brew install qemu - 安装多架构GDB:
brew install gdb-multiarch
注意:如果之前装过错误的工具链,先卸载:
brew uninstall --force 旧工具包名称
2. 处理GDB的macOS权限问题
macOS的安全机制会阻止未签名的GDB调试程序,需完成以下配置:
- 打开「钥匙串访问」,创建自签名代码签名证书:
- 菜单「钥匙串访问」→「证书助理」→「创建证书」
- 名称填
gdb-cert,身份类型选「自签名根证书」,证书类型选「代码签名」,勾选「让我覆盖这些默认值」 - 一路下一步,最后将证书位置设为「系统」,输入密码确认
- 找到刚创建的
gdb-cert证书,右键→「显示简介」→「信任」,将「代码签名」设为「始终信任」 - 重启电脑(必须重启才能生效)
- 给gdb-multiarch签名:
sudo codesign -fs gdb-cert $(which gdb-multiarch)
3. 编译ARM64裸机汇编程序
假设你的hello.s是树莓派4兼容的ARM64裸机代码,编译步骤如下:
- 汇编生成目标文件:
aarch64-linux-gnu-as -o hello.o hello.s - 创建裸机链接脚本
linker.ld(指定树莓派4的内核加载地址):ENTRY(_start) SECTIONS { . = 0x80000; /* 树莓派4的内核起始加载地址 */ .text : { *(.text) } .data : { *(.data) } .bss : { *(.bss) } } - 链接生成ELF可执行文件:
aarch64-linux-gnu-ld -T linker.ld -o hello.elf hello.o
4. 启动QEMU并等待调试
启动QEMU模拟树莓派4,开启调试端口:
qemu-system-aarch64 -M raspi4b -kernel hello.elf -s -S -serial stdio
-M raspi4b:模拟树莓派4B硬件-kernel hello.elf:加载编译好的ELF文件-s:开启默认1234端口的GDB调试服务-S:启动后暂停执行,等待GDB连接-serial stdio:将串口输出重定向到终端
5. 用GDB连接调试
打开新终端窗口,启动gdb-multiarch并连接QEMU:
gdb-multiarch hello.elf
在GDB命令行中输入以下命令开始调试:
target remote localhost:1234
常用调试命令:
break _start:在程序入口点设置断点continue:恢复程序执行step:单步执行汇编指令info registers:查看ARM64寄存器状态x/10i $pc:查看当前PC指针附近的10条汇编指令
内容的提问来源于stack exchange,提问作者Max Sedlusch
相关产品推荐
相关产品推荐

