問題タブ [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.
c - nm:共有ライブラリ内のシンボルのオブジェクトファイルを表示する方法は?
25個のオブジェクトファイルを組み合わせて1つの共有ライブラリを形成しています。gccで共有ライブラリを生成し、 nm -D libmylib.soで公開されたシンボルを探していたときに、.bssセクションにiとyという名前の2つの望ましくない公開されたシンボルが見つかりました。私は自分のソースファイルでそれらを見つけようとしましたが、見つけることができないので、誰かがこれらの望ましくない露出されたシンボルを正確に持っている.oファイルを見つける方法があるかどうか教えてくれますか?nmでそれを行うことはできますか、それとも別のツールが必要ですか?
どんな助けでもいただければ幸いです。
c++ - Visual Studio C++ ABI および VS コンパイル済みオブジェクトの readelf ユーティリティ?
Visual Studio を使用して C++ ソース コードをコンパイルし、 と を調査するときに、 と のデュオに代わるものreadelfを探しています。objdumplibobjdll
MinGW がこのツールの移植を提供していることは知っていますが、Microsoft C++ ABI を公式にサポートするものを探しています。
この問題が発生した場合、私は Visual Studio 2012 を使用しています。
ありがとう。
arm - objdump に ELF セクションが表示されない
私が知る限り、仕様に準拠している ELF を放出するツールがあります。Readelf の出力は問題ないように見えますが、objdump は何の逆アセンブルも拒否します。
デバッグを支援するために、入力を単一のグローバル var と "int main(void) { return 0;}" に簡略化しました。小さなセクション サイズは正しいです。
特に、objdump はセクション テーブルを見つけられないようです。
また、まったく同じオブジェクトから構築された別の ELF もあり、通常のツールチェーンを使用してのみ生成されます。
「既知の適切な」kernel.elf から .comment および .ARM.attributes セクション (objdump が必要とする場合) を削除した後でも、そこにセクションがリストされますが、ツールの davidm.elf にはリストされません。
readelf -x でセクションの内容が同じであることを確認しました。
私がイメージできる唯一のことは、ELF ファイルのレイアウトが異なっており、BFD のいくつかの期待に反していることです。これは、readelf (および私のツール) が問題なく処理するのに、objdump に問題がある理由を説明できます。
完全な読み取り:
オンディスク レイアウトのアグレッシブなパッキングが問題を引き起こしている可能性はありますか? BFD が期待する、文書化されている、またはその他のバイトストリーム アラインメント制限に違反していますか?
最後に、このファイルはアドレス空間に mmap されることを意図したものではありません。ELF を小さく保つことはより重要です。
乾杯、 DavidM
編集:ファイルをアップロードするか、「objdump -x」を提供するように求められました。だから私は両方をやった: davidm.elf
debugging - Objdump/GCC - BFD: Dwarf エラー: 破損した行番号セクション
objdump を使用してアセンブリ コード (ソース コードと混合) を生成しようとすると、
次のエラーが表示されます。
生成された出力アセンブリは、ソース コードと混在していません。誰かがこれが何を意味するのかを明確にすることができますか? とにかくこれを修正する方法はありますか?
assembly - 「gcc-S」は「objdump-D」とは異なります
小さなコードを書き、それをコンパイルしてgcc -S、ASMの出力を確認しました。
objdump -DLinuxでは、 (逆アセンブル)を呼び出すと同等の構造になると思いますが、次のようになります。
mov/subの代わりにmovl/を取得するのはなぜsublですか?
c - 関数はどのようにメモリに格納されますか?
私は Linux と C について深く掘り下げてきましたが、関数がどのようにメモリに格納されるのかに興味があります。私は次の機能を持っています:
十分に単純です。この機能を持つ実行可能ファイルで objdump を実行すると、次のようになります。
これはすべて正しく見えます。興味深いのは、次のコードを実行するときです。
私は以下を取得します(これは正しくありません):
memset( data, 0, sizeof( data ) ); を除外することを選択した場合 行の場合、右端のバイトは正しいですが、先頭の 1 が残っているものもあります。
誰にも理由の説明がありますか
A) memset を使用して配列をクリアすると、関数の表現が正しくなくなります (編集: 不正確)。
解決策: memset( data, 0, 20 * sizeof( unsigned char ) ) ではなく memset( data, 0, sizeof( data ) ) を使用したことが原因でした。配列全体のサイズよりもポインターのサイズのみを調べていたため、メモリが完全に設定されていませんでした。
B) メモリに格納されているこのバイトは何ですか? 整数?チャー?ここで何が起こっているのかよくわかりません。(明確化:メモリ内のそのようなデータをトラバースするためにどのタイプのポインタを使用しますか?)
解決策: 私はばかです。unsigned キーワードを忘れてしまいました。それが問題全体の原因です:(
どんな助けでも大歓迎です-これを探し回っても何も見つかりませんでした。
ニール
PS: これは、x86 の命令がバイト境界またはハーフバイト境界で終わらないことが原因であるとすぐに思いました。しかし、それはあまり意味がなく、問題が発生することはありません。
char 型のエラーを指摘してくれた Will に感謝します。unsigned char である必要があります。ただし、個々のバイトにアクセスする方法についてはまだ興味があります。
elf - コンパイルされたELF実行可能ファイル(逆アセンブルなし)からいくつかの関数を抽出するにはどうすればよいですか?
ソースがない大きな実行可能ファイルを扱っています(長い話)。
そこからいくつかの関数のバイナリコードを抽出したいのですが、自分のプログラムからそれらを呼び出してみてください。私が探している関数は、重要な場合は、すべて同じソースファイルからコンパイルされました(Linuxではgccを使用)。
objdumpを使用して関数のバイナリコードを確認できます。関数のバイナリコードをダンプするようにツールを説得する方法はありますか?他に何もせずに、分解することもありませんか?
基本的に、関数が定義されているCファイルがfoo.cと呼ばれる場合、foo.oを取得したいと思います(実際にはfoo.Soを好みますが、実行可能ファイルには存在しません)。objdump、readelfなどで実行できますか?
重要な場合、関数は自己完結型です。
ありがとう!
reverse-engineering - objdump を使用したフラット バイナリ ファイルの逆アセンブル
objdump を使用してフラット バイナリ ファイルを逆アセンブルできますか?
以下を使用して、ELF ファイルなどの構造化されたバイナリ実行可能ファイルを逆アセンブルすることに精通しています。
しかし、アドレス 0xabcd1000 などにロードされることがわかっているフラット バイナリ ファイルがある場合、それを逆アセンブルするよう objdump に依頼できますか? 「--start-address=0xabcd1000」などのオプションを指定しようとしましたが、objdump はフォーマットを認識しないとだけ述べています。
ファイルを逆アセンブルする方法については他にもアイデアがありますが、objdump が簡単な解決策を提供できるかどうかを知りたいと思いました。
memory - ARM メモリからダンプされたデータのデコードに関する問題
これで、ARM マシンのメモリからコンテンツがダンプされました。実際にはARM命令ですが、これらの16進数をARM命令に変換する方法がわかりません。私が今持っているのは、「arm-elf-objdump」が.binファイルを読み取り、.binファイルの内容を逆アセンブルできることです。しかし、バイナリファイルとは異なる16進数のテキストしかありません。このデコードを行うにはどうすればよいですか?
例えば
実際には、「e3a00000」は「mov r0, #0」を意味します。これを行うためのツールがあるはずです。誰でも私にいくつかの提案をすることができますか?
c - 共通セクション変数が実行可能ファイルではなくオブジェクトファイルにのみ表示されるのはなぜですか?
実行可能ファイルの「共通」セクションについてもっと理解しようとしていますがobjdump、コンパイルされたコードで実行すると、実行可能ファイルではなくオブジェクトファイル()にのみ共通コードに配置された変数が表示されることに気付きまし*.oた。
何故ですか?
ビルドコマンド:
objdumpiシンボルテーブルの共通セクションに表示されます。
実行可能ファイルで実行しない限り、次のようになります。
-fno-common代わりにフラグを使用してオブジェクトファイルを再構築すると.bss、実行可能ファイルの場合と同じようにセグメントに表示されます。最終的な実行可能ファイルには、この「COMMON」セクションがありませんか?