我今天安装了Xcode 8.1。它包括版本为360.1.65的lldb。当我使用lldb在iOS 7.1.2上调试armv7二进制文件时。它无法自动显示拇指代码。这是我使用disas命令的结果。
(lldb) disas -s 0x709d8 -e 0x709e0
networkd`_mh_execute_header:
0x709d8 <+39384>: b 0xff3aca20
0x709dc <+39388>: .long 0xf64c6940 ; unknown opcode
我在lldb-350.0.21.9(Xcode 7.3.1)上测试相同的代码,没问题。
(lldb) disas -s 0x479d8 -e 0x479e0
networkd`___lldb_unnamed_function192$$networkd:
0x479d8 <+352>: blx 0x57f74 ; symbol stub for: xpc_data_get_bytes_ptr
0x479dc <+356>: ldr r0, [r0, #0x14]
0x479de <+358>: movw r0, #0xc800
任何人都可以帮助我。谢谢。
答案 0 :(得分:0)
有关代码是arm还是thumb的信息在符号表中携带,调试器会读取该信息。看起来在8.0示例中,您反汇编函数中的代码(它不在二进制标头中),因此我们无法找出要使用的正确架构。 7.1示例是我们认识到的一个功能(尽管它的名称已被删除......)所以我们做对了。
作为一种变通方法,您可以通过将-A thumb
传递给disassemble
来强制进行选择。
如果您在识别函数中反汇编代码时也看到了这一点,则应该使用http://bugreporter.apple.com提交错误。