問題タブ [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.
objdump - objdump がグローバル変数を処理する方法
テスト用に次のダミーコードを作成しました
/tmp/test.c には以下が含まれます。
/tmp/test.h には以下が含まれます。
次のように objdump をコンパイルして実行します。
cd /tmp gcc -c test.c -o test.o objdump -gdsMIntel test.o
次の出力が得られます。
上記の分解では、次のことがわかります。
c の場合は、次のようになります。
p->a の場合、次の処理が行われます。
その場合、c と p->a は両方とも同じアドレス (ds:0x0) にありますか?
c++ - objdumpを使用して、高度に最適化されたオブジェクトファイルのソースコードをインターリーブするにはどうすればよいですか?
デバッグ情報を含む高度に最適化されたコンパイル済みC++オブジェクトファイル(g ++でコンパイル、指定)があります。-O3 -g -march=amdfam10 -Wall
私はを使用してobjdump -S "objname"
います。
残念ながら、ソースのインターリーブは機能していないようです。同じグループの行(1行だけでなく)が繰り返され、1つのコード行だけでなく複数の行が何度も続き、その後に1つの組立行だけが続くことがあるためです。その後、他の3/4ソースラインはあまり意味がありません。
たとえば、イテレータを含む3/4 C ++コード行が表示され、初期化の後に1/2ASM行のみが続きますか?それは意味がありますか?
何が起こっているのか考えてみませんか?
c - gcc を使用してリンカーに割り当てられたコード オブジェクトを一覧表示する方法は?
複数のコード モジュールと静的ライブラリで構成される組み込みアプリケーションを構築しています。一部のグローバル変数は、専用のメモリ セクション (つまり、デフォルトの .data セクションではない) に明示的に配置されます。
プロセッサ メモリ アーキテクチャは 4 バンクで、連続した物理メモリ空間を作成します。私のアプリケーションでは、最初のバンクのみがコード用に予約されており、他の 3 つのバンクは明示的に割り当てられたグローバルと小さなスタック用に予約されています。
問題は、コード セクション (.text) が第 1 バンクの境界を超えて大きくなり、次のリンカ エラー メッセージが表示されることです。
リンカーがセクションとオブジェクトのオーバーラップをチェックしてビルドを中止する前に、オブジェクトの割り当て (おそらく一時オブジェクト ファイル内) を確認する方法はありますか?
linux - レジスタ値のデバッグ
クラッシュするメソッドのobjdumpがあります。クラッシュはメモリアクセスの不良が原因であることがわかりました。メモリアドレスはMIPSレジスタa0に存在します。objdumpを段階的にバックトラック(ウォークスルー)する以外に、レジスタがこのアドレスをどのように取得したかを追跡する方法はありますか(a0はs3などから取得しました)。
そしてもう1つ質問があります。
カーネルでページングはどのように行われますか。それらはすべてすでにメモリ内にあるため、カーネルに仮想アドレスの概念があってはなりません。この質問は、クラッシュ時にBADVA(BAD Virtual Address)と呼ばれるものが不正なアドレスを保持しているために発生しました。
これがクラッシュレポートです
assembly - movb命令を分解する方法
私は逆アセンブラを書いていて、命令フォーマットをレビューしていて(そして手作業でいくつかの逆アセンブルを行っていました)、デコードできないように見える命令に遭遇しました。
その特定の命令の出力(objdumpから)は次のとおりです。
ただし、オペコードc6はMOV Eb Ib(Mod R / Mからimm8)であると想定されているため、命令がどのようにデコードされるのかわかりません。
誰かがそれがどのようにデコードされるかについて私に教えてもらえますか?
ありがとう!
gdb - gdb の $eip を objdump -d の出力にマップする方法は?
既知のライブラリ (Linux i686 アーキテクチャ) で停止する不完全なスタック トレースがあります。最後に呼び出された関数を確認するために、「objdump -d library.so」によって生成されたファイル内のアドレスに、gdb による出力として $eip をマップしようとしています。gdb 内の「info shared」からの From アドレス出力と、$eip を使用してオフセットを計算し、それを objdump -d 出力の逆アセンブリ テキスト セクションからのオフセットに変換できるのではないかと考えました。このアプローチが賢明かどうかはわかりませんが、共有ライブラリを使用して単純なテスト ハーネス アプリで試してみても、正しい関数内のアドレスが得られません。どんな助けでも大歓迎です。
elf - ELF アーカイブ ファイル内のセクションの実際の位置を取得するにはどうすればよいですか?
Linux で .a ELF アーカイブ ファイルからバイナリ セクションを抽出したいと考えています。
アーカイブ ファイルに対して objdump -h を実行すると、アーカイブ ファイルに含まれるオブジェクト ファイルと、各セクションのセクション ヘッダーが一覧表示されます。ただし、[ファイル オフセット] 列は、アーカイブ内のオブジェクト ファイルの位置に関連しているように見えます。そうしないと、すべてのセクションが重なってしまうからです。
dd を使用して、アーカイブ ファイルからバイナリ情報を抽出できると思っていました。( ELF セクションのコンテンツのみを抽出する方法を参照してください)。アーカイブでこれを行うにはどうすればよいですか?
また、抽出しているセクションがこのコマンドで追加されることにも言及する必要があります。
bash - sed と awk を一緒に使用して置換マップを作成する
OSの下位レベルの仕組みをよりよく理解するために、いくつかのソフトウェアをリバースエンジニアリングしようとしています。objdump -d からの未加工のアドレス ダンプを objdump -t からの対応する値に置き換えたいと考えていますが、これは -Dslx オプションでさえ見逃しているようです。
objdump -t からの出力は次のようになります。
インデックス1とNFでawkを使用して必要な情報を抽出できます(実際に使用したコードは別のコンピューターにあります)。レコードごとに、フィールドを配列に入れます。
そしてここから私はちょっと迷っています。これらのエントリを使用して、出現するすべての「場所」を
この時点で、次に使用する sed コマンドを印刷してから、コマンドを手動でコピーして貼り付けて実行しています。のように出てくる
私はこれがあまり好きではありません。これを完全に自動化したいのです。私は Bash のいくつかのトリックに比較的慣れていないので、聞いたことのない簡単な解決策があるかもしれません。
例:(この時点では実際の入力にアクセスできませんが、これは私が持っている目標に十分近いです)
+
=
objdump - objdump の「安全でない」とはどういう意味ですか?
比較的新しい 64 ビット Linux システムで実行される objdump は、共有ライブラリの 1 つについて次のように不平を言います。
「lib64/libwhatever.so」での安全でない関数スコープの静的な使用。
どういう意味ですか?
man ページには、「unsafe」または「function-scope」とはどこにも記載されていません。