問題タブ [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++ - ソース ファイルごとの C/C++ メモリ フットプリント
C プログラミングでは、単一のソース コード ファイルが最終的なメモリ フットプリントにどれだけ貢献しているかを判断する方法はありますか?
ソースファイルtest1.c、test2.c、test3.cなどで構成される単純な C プログラムを想定してみましょう。環境は Linux でコンパイラはgccです。
objdump
と を使用すると、総フットプリントと、バイナリが、、およびセグメントreadelf
にどのように分散されているかを確認できます。しかし、 test1.cごとに生成されるバイナリ コードの量、test2.cごとに生成されるバイナリ コードの量などを確認することは可能ですか?.text
.data
.bss
visual-studio - objdumpELFおよびWindows
私はこのテーマ、つまりELFやLinux関連のものにかなり慣れていません。ELFファイルを書き込もうとしていますが、WinXPで書きたいと思っています。
私の質問は、これはコンパイルを含めてMS Visual Studioで実行できますか?私の理解では、ELFファイルはWindowsOSでコンパイルできません。まあ、少なくともそれは私のグーグルの研究が私に発見したものです。Linux OSをセットアップして、そこでコンパイルする必要がありますか?
objdumo(GNU binutilsの一部)を使用してWindowsXP上のELFファイルを分析できますか?
ヘルプとリンクは大歓迎です。
c - objdump -DをWindowsで特定の機能のみを表示させる方法は?
特定の機能のマシンコードを表示したい。たとえば、Linuxでは次のように入力します。
Windowsで同等のものは何でしょうか?
linux - ARM アーキテクチャの objdump の使用: ARM への逆アセンブル
オブジェクト ファイルがあり、逆アセンブルしようとしています。私が使用する場合:
のファイル形式のコードでアセンブリを取得しますelf64-x86-64
。
これを ARM に逆アセンブルしようとしていますが、どうすればよいですか?
c - 外部関数定義を見つける方法
私は大きなプロジェクトをコンパイルしています。このプロジェクトは共有ライブラリ、特に lapack を使用しています。
特定の機能について、システムがどの共有ライブラリでそれを見つけるかを確認したいと思います。
ここでnm出力:
予想通り、dpotrf_ は未定義です。
objdump の結果は次のとおりです。
だからobjdumpは何かを見つけます!どの共有ライブラリで見つかったかを表示するオプションはありますか? またはそれを行う別のプログラムですか?
c - Objdumpの結果を使用した制御フローグラフの作成
objdump-dの呼び出しによって返されるアセンブリ結果の制御フローグラフを作成しようとしています。現在、私が思いついた最善の方法は、結果の各行をリンクリストに入れ、各行のメモリアドレス、オペコード、およびオペランドを分離することです。objdumpの結果の通常の性質に依存してそれらを分離しています(メモリアドレスは、各行を表す文字列の文字2から文字7までです)。
これが完了したら、実際のCFG命令を開始します。CFGの各ノードは、開始メモリアドレスと終了メモリアドレス、前の基本ブロックへのポインタ、および任意の子基本ブロックへのポインタを保持します。次に、objdumpの結果を調べて、オペコードをx86_64内のすべての制御フローオペコードの配列と比較します。オペコードが制御フローのものである場合、基本ブロックの終わりとしてアドレスを記録し、オペコードに応じて、2つの子ポインター(条件付きオペコード)または1つ(呼び出しまたは戻り)を追加します。
私はこれをCで実装している最中であり、動作するように見えますが、非常に希薄な感じがします。誰か提案、または私が考慮していない何かがありますか?
これを読んでくれてありがとう!
編集:
これを使用して、DynamoRIOによって生成されたシステムコールのスタックトレースを、ターゲットバイナリの予想されるCFGと比較するという考え方です。このように構築することで、それが容易になることを願っています。利用可能なものを再利用していません。A)実際にはそれについては理解していなかったため、B)パス比較を実行できるように、グラフを使用可能なデータ構造にする必要があるためです。私を正しい方向に向けてくれてありがとう、あなたが並べたページのユーティリティのいくつかを見ていきます。コメントありがとうございます、本当に感謝しています!
linux - Linux 実行可能ファイルを逆アセンブル、変更、再アセンブルする方法は?
とにかくこれを行うことができますか?私は objdump を使用しましたが、私が知っているアセンブラで受け入れられるアセンブリ出力を生成しません。実行可能ファイル内の命令を変更して、後でテストできるようにしたいと考えています。
assembly - objdump 使用時のレジスタ値の決定
そのため、objdump ユーティリティを使用して、アセンブリから制御フロー グラフを作成しようとしていますが、問題が発生しています。基本的に、分岐が発生し、ターゲット アドレスが相対である場合はいつでも、次の基本ブロックの開始位置を知る方法がわかりません。よくわからないので、例を追加します。私のプログラムが objdump 出力を調べていて、最初の基本ブロックの開始アドレスを記録したとします。次に、相対アドレッシングを使用してジャンプ先の適切なアドレスを指すジャンプ コマンドをヒットします。最初の基本ブロックの終了がすぐそこにあることはわかっていますが、次の基本ブロックの開始の正しいアドレスを取得するにはどうすればよいですか? 誰でも提供できるガイダンスは大歓迎です。私はせいぜいx86の初心者であり、この1週間、これに頭を悩ませてきました。
c - コールグラフはどのように関数ポインタを解決しますか?
私はperlスクリプトを使用してCのコールグラフプログラムを実装しています。'objdump'の出力を使用して関数ポインタのコールグラフを解決する方法を知りたいですか?さまざまなコールグラフアプリケーションが関数ポインタをどのように解決しますか?関数ポインターは実行時に解決されますか、それとも静的に実行できますか?
編集 コールグラフは、プログラムの静的評価のサイクルをどのように解決しますか?
python - objdump 出力の解析
ここの誰かが、出力を解析してobjdump
オペコードを抽出するスクリプトを作成/使用したかどうか疑問に思っていましたか? 私は非常に些細な実装をしていますが、もっと良いものを探しています。
このスクリプトで私が直面している問題は、単に単純な文字列解析を行うことです。これはどちらかというとユーティリティ スクリプトなので、これらのテストを書いていません。カスタムメイドのパーサーまたは単純で効率的な正規表現を作成することで、同じことができるかどうか疑問に思っていました。
このクエリは学習を目的としているため、次回は (できれば) より良い方法でこのような問題に取り組むことができます。
実装の詳細は気にしません(シェル、ルビー、python、perl;何でも構いません)。コードはそれほど重要ではありません。本当に、どうやってそれを行うかについていくつかのヒントが欲しいです。