【问题标题】:lldb-360.1.65(xcode8.1) disas command with result errorlldb-360.1.65(xcode8.1) disas 命令,结果错误
【发布时间】:2016-11-02 14:22:38
【问题描述】:

我今天安装了 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    

谁能帮帮我。谢谢。

【问题讨论】:

    标签: ios lldb


    【解决方案1】:

    符号表中携带有关代码是 arm 还是 thumb 的信息,调试器会读取该信息。看起来在 8.0 示例中,您正在反汇编不在函数中的代码(它在二进制标头中),因此我们无法确定要使用的正确架构。 7.1 的示例位于我们识别的函数中(尽管它的名称已被删除......)所以我们做对了。

    作为一种解决方法,您可以通过将-A thumb 传递给disassemble 来强制选择。

    如果您在反汇编识别函数中的代码时也看到此问题,您应该向http://bugreporter.apple.com 提交错误。

    【讨论】:

    • 当我使用 -A thumbdisassemble。结果只是拇指。它无法处理第一个手臂代码(0x..9d8)。有没有办法在lldb中切换拇指和手臂自动
    • 不,lldb 没有任何“嘿,这个指令流开始看起来像手臂而不是拇指”类型的启发式。这可能是可行的,但 ARM 中的代码中经常有数据,所以要始终正确处理会很棘手。这很可能比它的价值更麻烦。而且您通常从符号中知道,因此大多数时候都没有必要。
    • 弄清楚为什么你不再看到你试图反汇编的二进制文件的符号会很有趣。
    猜你喜欢
    • 2012-09-23
    • 2016-11-18
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 2023-03-05
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多