問題タブ [elf]

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.

0 投票する
1 に答える
72 参照

linker - 実行可能ファイルのリンク

ELFファイルを手動でリンクする方法を理解しようとしています。ファイル構造を知っていますが、再配置可能なオブジェクトがリンクされる順序をどのように決定しますか?

0 投票する
4 に答える
2551 参照

linux - ELF ファイルのセクションを並べ替える簡単な方法

ELF ファイルのセクションを並べ替える簡単な方法を探しています。すべてを特定の順序で整列させたい一連のカスタム セクションがあります。

私が見つけた唯一の方法は、リンカー スクリプトを使用することです。ただし、ドキュメントには、カスタム リンカー スクリプトを指定するとデフォルトが上書きされることが示されています。デフォルトのリンカー スクリプトには多くのコンテンツが含まれており、3 つのセクションを常に特定の順序でまとめるためだけに、カスタム スクリプトで複製する必要はありません。そのようなリンカーの動作をハードコーディングするのはあまり柔軟ではないようです。

なぜ私はこれをしたいのですか?実行時のメモリ位置 (先頭と末尾) を知る必要があるデータのセクションがあります。そこで、2 つの追加セクションを作成し、それらにセンチネル変数を配置しました。次に、これらの変数のメモリ位置を使用して、メモリ内の未知のセクションの範囲を知りたいと考えています。

上記の例では、.targetSection のデータが markerA と markerB のアドレスの間にあることがわかります。

これを達成する別の方法はありますか?現在実行中の ELF イメージを読み込み、セクションの場所とサイズを決定できるライブラリはありますか?

0 投票する
1 に答える
1140 参照

linux - ELF ファイルに複数のシンボル テーブルを含めることはできますか?

ELF ファイルに複数のシンボル テーブルを含めることはできますか? なんか標準化されてる?

0 投票する
1 に答える
17326 参照

linker - readelf-S出力の説明

作成したMIPSシミュレーターにelfファイルをロードしようとしています。私が抱えている問題は、elfセクションのヘッダーオフセットの背後にある意味を完全に理解していないことです。セグメントダンプを実行すると、セグメント25〜31および33〜35は0x00000000で「開始」しますが、ヘッダーには、セグメントが何らかの値(例:010190)のオフセットで開始することが示されます。また、-Sセクションの冒頭で、readelfは、ヘッダーが0x107b4のメモリで開始することを示しています。しかし、-Sに見られるように、最も初期のメモリ割り当て(セグメント0が空であるため)は、実際にはオフセット010210のセグメント26にあります。誰かがここで何が起こっているのか説明できますか?このファイルすべてをメモリ配列に静的に割り当てたい。私がこれを行うのを妨げているオフセットについてのいくつかの仮定はありますか?そして、なぜreadelfは0x107b4がヘッダーの開始点であると言うのですか?

また、.initreadelfで指定された「エントリポイント」にPCを配置する前に、実行する必要がありますか?

編集:さて、実行可能ファイルの16進ダンプを実行しましたが、オフセットが実際のelfファイル(「アドレス」0〜11d48の要素を含む)の場所を参照していることがわかりました。 ..メモリアドレスの多くがアドレス0x00000000を参照しているという事実を解決するにはどうすればよいですか?もちろん、それらには異なるオフセットがありますが、それがファイル固有であることがわかったので、それはいくつかのセクションエイリアスを意味します。実際にメモリアドレス指定でオフセットを使用しますか?

セグメント25:

Readelf -S出力:

セクションヘッダー:

0 投票する
2 に答える
3974 参照

gcc - 共有ライブラリが独自のベースアドレスを取得する方法

すべてのシンボルのオフセット アドレスがあります (libelf を独自のバイナリ .so で実行して取得)。ここで、実行時に、これらすべてのシンボルの絶対アドレスを計算する必要があります。そのためには、ベース アドレス (共有ライブラリが読み込まれる場所) を取得して計算を行う必要があります。

symbol_address = base_address + symbol_offset

共有ライブラリが独自のベースアドレスを取得するにはどうすればよいですか? Windows では、DllMain に渡されたパラメーターを使用しますが、Linux に同等のものはありますか?

0 投票する
1 に答える
2659 参照

gcc - オブジェクト ファイルのストリップを解除するにはどうすればよいですか?

削除されたオブジェクト ファイルを削除するにはどうすればよいですか?

elfutils の eu-unstrip でこれを作成できますか?

再コンパイルせずに zImage カーネルを vmlinux に変換するには、これが必要です。

これは私のスクリプトの一部です:

しかし、私の結果の vmlinux には ELF ヘッダーが含まれていないため、不明な形式になっています。これらのヘッダーを回復するにはどうすればよいですか?

0 投票する
2 に答える
5833 参照

visual-studio - objdumpELFおよびWindows

私はこのテーマ、つまりELFやLinux関連のものにかなり慣れていません。ELFファイルを書き込もうとしていますが、WinXPで書きたいと思っています。

私の質問は、これはコンパイルを含めてMS Visual Studioで実行できますか?私の理解では、ELFファイルはWindowsOSでコンパイルできません。まあ、少なくともそれは私のグーグルの研究が私に発見したものです。Linux OSをセットアップして、そこでコンパイルする必要がありますか?

objdumo(GNU binutilsの一部)を使用してWindowsXP上のELFファイルを分析できますか?

ヘルプとリンクは大歓迎です。

0 投票する
4 に答える
8805 参照

c - ゼロ初期化されていない.bssセクションはどうですか

私たちが知っているように、.bss には初期化されていない変数が含まれています。Cコードの場合、プログラマーは変数を使用する前に変数を初期化します。その場合、C コードを実行する前に .bss をゼロにする必要はありません。

私は正しいですか?

ありがとう

0 投票する
2 に答える
2132 参照

linux - 手作業による ELF ファイル

こんにちは、手動で ELF ファイルを作成しました。これには 2 つのセクション (.text と .shstrtab) と、.text セクションをロードするプログラム ヘッダーがあります。.text セクションは非常に小さく、次の 3 つの命令のみで構成されています...

この elf ファイルに対して readelf を実行しても、readelf は文句を言いません。このファイルを実行すると、実行するとすぐに強制終了され、「強制終了」というメッセージが画面に表示されます。ここstackoverflowで次の投稿を読みましたが、まだ読み進めています。

今、私の懸念は、このプログラムが(追加の)メモリを要求しないことと、手動で ELF を実行して、システムによってまったく許容されることを期待することは本当に可能かということです。

ありがとうございました、

0 投票する
2 に答える
1991 参照

c - C 関数ポインタの関数名を取得する方法

次の問題があります: backtrace(3) 関数を使用して C でバックトレースを取得すると、関数の名前が返されたシンボルは、dwarf ライブラリと dladdr(3) で簡単に判別できます。

問題は、単純な関数ポインターがある場合 (たとえば&functionを渡すことによって)、dladdr + dwarf 関数が役に立たないことです。ポインターが backtrace(3) によって返されるものとは異なるようです (backtrace はこれらの関数ポインターをスタックから直接取得するため、おかしなことではありません)。

私の質問は、これらの名前も解決する方法があるかどうかです。また、2つのポインターの違いを正確に知りたいです。

ありがとう!

アップデート:

ポインター間の違いは非常に重要です:
バックトレースで得られるものは: 0x8048ca4
ダイレクト ポインター バージョン: 0x3ba838

2番目のものにはオフセットが必要なようです。