2016-11-02 5 views
0

今日、Xcode 8.1がインストールされました。これには、バージョン360.1.65のlldbが含まれています。 lldbを使ってiOS 7.1.2でarmv7バイナリをデバッグすると親指のコードを自動的に害することはできません。これはdisasコマンドの結果です。lldb-360.1.65(xcode8.1)結果エラーのある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

コードがアームであるかサムであるかに関する情報がシンボルテーブルに格納され、デバッガがこれを読み取ります。 8.0の例では、関数に含まれていないコード(バイナリヘッダにある)を逆アセンブルしているように見えますので、使用する正しいアーキテクチャを理解することはできません。 7.1の例は認識している関数です(名前は削除されていますが...)。

回避策として、-A thumbdisassembleに渡して強制的に選択することができます。

認識された関数でコードを逆アセンブルするときにも同様に表示される場合は、http://bugreporter.apple.comというバグを報告する必要があります。

+0

私は「分解する」に「親指」を使用します。結果は親指だけです。最初のアームコード(0x..9d8)は処理できません。 lldbで親指と腕を切り替える方法はありますか? – LinuxPad

+0

いいえ、lldbには「この命令ストリームは腕ではないように見え始めています」というタイプのヒューリスティックスはありません。これは可能かもしれませんが、ARMではコード内にデータが存在することが多いため、常に適切に処理するのは難しいでしょう。それは価値があるよりも、おそらく多くのトラブルです。そしてあなたは一般的にシンボルから知っているので、ほとんどの時間は必要ではありません。 –

+0

逆アセンブルしようとしているバイナリのシンボルが表示されなくなった理由を理解することは興味深いでしょう。 –

関連する問題