私はotoolが逆アセンブリ出力を切り捨てるのはなぜですか?
otool -t binary
otool
このコマンドを実行し、正しくbinary
のテキストセクションをダンプします。例えば。
0000000100002100 55 48 89 e5 41 56 53 48 8b 35 32 24 54 00 4c 8b
:
しかし、私は、このコマンドを実行します。
otool -tvV binary
otool
は、テキストセクションの巨大な部分をスキップ:
00000001003a32ce pushq %rbp
:
最初の3805646のバイトが単純にスキップされ、解体されていません。 lldb
でバイナリを開くと、スキップされたアドレスでコードを逆アセンブルできます。
似たような経験をしたことがありますか? otool
に内部サイズの制限があり、その制限を超えるセクションが切り捨てられますか?誰かが回避策を発見したか、無料で入手できる同等のツールを知っていますか?
lldb
で全体のバイナリを分解してみました:
lldb binary
(lldb) dis -s 0x100002100 -e ...
は、テキストセクションの最後のバイトのアドレスに-e
を設定するが、それはどちらか動作しません。実際にはlldb
は約5000バイトのテキストセクションを逆アセンブルした後に出力を停止します。
ここにいるかもしれません。アドレスを持つ最初のシンボルは '0x100000000'にありますが、それは実際にはシンボルではなくベースオフセットとして機能する' mh_execute_header'です。 2番目は '0x1003a32ce'にあり、これは最初の"本当の "シンボルです。解体はその前に何かをスキップしてそこから始まるようです。うわー、それは狂っている。私は古いオットーを試して、何が起こるか見る。 – Mecki
うん、あなたはまったく正しい。 Xcode 7.3.1から 'otool'を試してみましたが、これは期待通りに動作しますので、明らかにバグです。あなたはすでにAppleにそれを報告しましたか?たとえそれが偽装として閉鎖されたとしても、私は今それを行うだろうと思います。ありがとう、トン! – Mecki
さて、7.3.1の 'otool'も正しく動作していないようです。それは最初のシンボルの前にすべてを分解していますが、それの後には何もありません。両方の出力を組み合わせるだけで、バイナリ全体のアセンブリコードが生成されます。 – Mecki