Xcode的always show disassembly是如何实现的

如何用lldb的命令实现这一功能呢?
小弟知道 lldb有dis的命令可以反汇编程序代码或者地址的代码

  1. 实现原理是根据符号地址找到内存中加载的 __TEXT,__text 段内容,然后执行反汇编得到汇编代码。
  2. 通过 lldb dump 出特定符号处的 memory,再通过 capstone 等反汇编框架还原成汇编代码即可。
1 个赞

嗯嗯 那就是用简单的lldb的dis命令并不能实现xcode的always show disssembly功能了 对吧

Xcode 背后其实做了很多,因为内存里的都是机器码,在开启 Always Show Disssembly 以后,Xcode 首先要将被断住的内容执行反汇编,生成 .s 的源码,随后还要通过 source map 将当前地址映射到源码上,并以用户友好的形式展示。

2 个赞

这部分功能我理解应该是lldb自带的

1 个赞

嗯 的确是lldb的,因为我这边就是用终端开的lldb窗口执行的断点,但是因为有符号表的原因,显示的是代码形式的内容。

有个简单的方式应该可行,删除本地的符号表文件,哈哈,这样lldb应该就关联不到代码了。

嗯,lldb 依赖了 LLVM 的 Disassembler,也包含了对 DWARF 的解析。