問題タブ [objdump]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - NDKツールを使用してライブラリをソースコードでコンパイルするには?
ライブラリをソースコードでコンパイルするには?
Android ndk でネイティブ ライブラリを開発しています。時々、logcat からクラッシュ ダンプ メッセージを受け取りました。
アドレス 2e11c で実際のソース コードを見つける方法が問題です。私はグーグルからいくつかの解決策を検索します、誰かが言いました:
ただし、出力テキストにはソース コードはなく、アセンブリ コードのみが表示されます。ndk5rでサンプルのhello-jniプロジェクトを使用します。
-S オプションでソースを表示することはできますか?
[UPDATE ソリューション 2010/06/19]
ndk-gdb チュートリアル: A debuggable JNI example for Androidを見つけました。それは言った、ndk-buildスクリプトは私のデバッグシンボルを殺します。私は ndk-build V=1 を実行してそれを理解しようとします:
コマンドは私のデバッグシンボルを取り除きます:
ndk のバージョンが異なるため、strip コマンドを無効にする方法がわかりません。ただし、パスで削除する前に .so を使用できます。
ソースコードが戻ってきました:
c - objdump にアドレスを指定して、それを含む関数を逆アセンブルすることはできますか?
クラッシュの原因を確認するのに十分なコンテキストを取得するためだけに、大量のライブラリ コードを逆アセンブルしなければならないのは本当に面倒です。objdump にアドレスを渡すだけで、それを含む関数の境界を見つける方法はありますか?
編集:さらに良いことに、スタックトレース全体を逆アセンブルできますか?
objdump - objdump の Symbol テーブルの各列は何を意味していますか?
行っman objdump
たけどそんな情報ない
5つの列の意味を知っている人はいますか?
c++ - 抽象クラスにshared_ptrを使用する場合、nmまたはobjdumpで関数シンボルを見つける方法は?
抽象クラス ABC に shared_ptr を使用します。ABCImpl クラスは ABC の実装です。abc_ptr は、ABCImpl オブジェクトを指す shared_ptr< ABC> です。呼び出し元関数では、abc_ptr は ABC クラスのメンバー関数 (func_in_ABC) の 1 つを呼び出します。コンパイルは成功です。しかし、nm や objdump を使用すると、abc_ptr のシンボルしか表示されませんでした。呼び出し元関数の func_in_ABC() に対して表示されるシンボルはありません。
呼び出し元関数で func_in_ABC() のシンボルの出力を取得する理由、または方法を知っている人はいますか?
コードは次のとおりです。 ABC.h:
ABCImpl.h で:
ABCImpl.cpp で:
呼び出し元関数 D.cpp:
nm からの Do の出力:
ABC.h の func_in_ABC の定義を変更すると、D.cpp のコンパイルが失敗します。Do をコンパイルするときに、クラス ABC の定義をチェックすると思います。
assembly - 逆アセンブルされた x86 elf 実行可能ファイルのセクションと、それらが実行されるタイミングと順序
私は現在 x86 アセンブリを学習しており、通常の x86 elf 実行可能ファイルでリバース エンジニアリングを試みています。現在、init main などの複数のセクションがあります。Google で少し調べてみましたが、必要なものが見つかりませんでした。実行されるセクションと実行順序を本当に理解したいので、ここの誰かがこのトピックについて読む場所を知っているかもしれません。詳細な情報が記載されたこのトピックへのリンクを歓迎します。
assembly - objdump 出力 - 列は何を表しているか?
objdump -r
オブジェクトファイルを実行したところ、次の出力が得られました。ここで、各列は何を表していますか? 私はそれを見逃したかもしれませんが、ドキュメントには明記されていません。
等
c - GCC/objdump: コンパイル可能/ビルド可能なアセンブリ (C/C++ が散在する) ソースを生成していますか?
これは、 GCC を使用して読み取り可能なアセンブリを生成することに近いですか? 、しかし、ここでの私のコンテキストはavr-gcc
(それに対応してavr-objdump
) Atmel 用です (ただし、GCC ボード全体に適用されると思います)。
問題は、複数の .c および .cpp ファイルのプロジェクトがあることです。最終的に、「マスター」.cpp ファイルと同じ名前の実行可能ファイルにコンパイルされます。このプロセスでは、次の 2 つの方法でアセンブリ リストを取得できます。
- スイッチを使用して、
gcc
アセンブリ リストのソースを出力するように指示できます( Linux Assembly and Disassembly an Introduction を参照)。-S
この場合、次のような内容のファイルを取得します。/li>
(まだ試していませんが、このコードはコンパイル可能/ビルド可能だと思います.... )
- スイッチを使用して、最終的な実行可能ファイルを検査し、
objdump
アセンブリ リスト ソースを出力するように指示でき-S
ます。この場合、次のような内容のファイルを取得します。/li>
(私はこのコードをビルドしようとしましたが、失敗しました - 「行番号」をラベルとして読み取ります)
明らかに、両方のリスト (loop
少なくとも関数については) は同じアセンブリ コードを表しています。を除外する:
- コンパイルする必要があるもの
gcc
-- コンパイルobjdump
しないもの - 1
objdump
つには、「マスター」以外のファイルで定義できるすべての参照関数のリストが含まれています(例:digitalWrite
) -1gcc
つにはありません - 1
objdump
つには、アセンブリが「散在」している元の C/C++ ソース行が含まれています (ただし、たまにしかなく、一見 C ファイルの場合のみですか?) --gcc
1 つには含まれていません。
それで、「コンパイル可能」であるアセンブリリストを取得する方法はありますが、すべてのリンクされた関数があり、ソース C/C++ コードが (おそらく、適切な場合) コメントとして散在しています (干渉しないように)アセンブリ ファイルのコンパイルで)? (の出力用のパーサーを書くことを除いてobjdump
、つまり :) )
gcc - .data.rel.ro は何に使用されますか?
共有オブジェクトのメモリ使用量を分析するために objdump を使用しています。.data セクションと .rodata セクションに加えて、.data.rel.roセクションがあります。
これが何に使われたか知っている人はいますか?
assembly - objdump と ARM と Thumb の比較
ARM 用にビルドされたオブジェクトを gcc で逆アセンブルしようとしています。残念ながら、objdump はコードが ARM と Thumb のどちらであるかを推測しようとしていますが、間違っています。実際には ARM であるのに、コードが Thumb であると認識します。
objdump には、強制的にすべての命令を Thumb ( -Mforce-thumb
) として解釈するオプションがありますが、ARM モードを強制するオプションはありません!
これは私には非常に奇妙な省略のように思え、作業を完了する能力を著しく妨げています (私は組み込みデバイスを使用しており、デバッグの唯一の手段は逆アセンブリを確認することです)。Thumb をサポートしない ARM アーキテクチャを使用するよう objdump に指示するなど、さまざまなアプローチを試しましたが、何も機能していないようです。何か案は?
(そして、はい、命令が本当にARMであることは知っています...)
binutils - nmとobjdumpの違い
マニュアルを見て、objdump
重複nm
する機能があります。
それぞれをいつ使用しますか?各コマンドの本来の目的は何でしたか?