在Apple Silicon设备上调试并查看模拟x86_64寄存器的方案
在M1 MacBook Air上用LLDB本地调试C代码并使用x86_64汇编语法与寄存器
背景
使用M1 MacBook Air时,想要本地调试C代码并采用x86_64汇编语法及寄存器,但遇到这些问题:
- 安装配置gdb流程繁琐
- 使用UTM/QEMU模拟时出现调试相关的非特权操作错误
- 虽知晓onlinegdb等在线方案,但更偏好本地操作,且onlinegdb基于Linux、仅支持GAS不支持NASM
下面是基于LLDB的可行解决方法:
步骤
1. 编译x86_64架构的C程序
用clang编译时指定x86_64架构并生成调试信息:
clang -arch x86_64 -g your_code.c -o your_code
-arch x86_64:强制生成x86_64架构的二进制,通过Rosetta 2运行-g:生成调试符号,方便LLDB断点、查看寄存器等操作
2. 启动LLDB调试
直接用LLDB加载编译好的二进制:
lldb ./your_code
3. 设置NASM风格的x86_64汇编语法
LLDB默认可能用AT&T(GAS)语法,切换为NASM风格:
settings set target.x86-disassembly-flavor nasm
执行后用disassemble命令查看汇编代码,即可确认是NASM语法。
4. 调试时查看x86_64寄存器
- 查看所有寄存器:
register read
- 单步执行汇编指令并跟踪寄存器:
# 单步执行一条汇编指令 si # 再次查看寄存器状态 register read
也可以用n单步执行源码行,之后查看寄存器变化。
额外说明
- LLDB是Xcode Command Line Tools自带工具,若未安装可执行
xcode-select --install完成安装 - 调试的x86_64二进制通过Rosetta 2运行,LLDB会正确显示x86_64架构的寄存器状态,完全符合需求
内容的提问来源于stack exchange,提问作者Tirtharaj Pramanik
相关产品推荐
相关产品推荐

