問題タブ [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.
stack - スタック、フレーム、グローバルポインター、ELFファイル
ELFファイルのどこにスタック、グローバル、およびフレームポインターがあるかを判断するにはどうすればよいですか?
c++ - BDM elf ファイル vs 通常の elf ファイル
BDM ELF ファイルが通常の ELF ファイルよりも使用されるメモリの点で優れている点は何ですか?
私は両方について次のことを知っています。
- BDM ELF ファイルは、JTAG をプラグインすることにより、Trace32 などの任意のデバッガ ツールを介したデバッグに使用できます。ECM の ROM 領域にフラッシュする必要がある対応する FLS ファイル (フラッシュ ファイル) があれば、通常の ELF ファイルもデバッグ目的で使用できます。
- BDM ELF ファイルは ECM (電子制御モジュール) の RAM 領域にロードされますが、通常の ELF ファイルとそれに対応する FLS が ROM にロードされるのは ECM のものです。
- ELF ファイル (BDM または通常のファイル) は、ECM のメモリに完全に読み込まれるわけではありません (これは、ELF の読み込みに使用する ECM メモリのサイズから理解できます。 MB 単位の ELF)、ELF ファイルの一部 (型、変数、関数などのシンボル) は Trace32 メモリに保持されます。
上記は、ELF の使用に関する私の主な理解でした。私が何か間違って解釈した場合に備えて、皆さんが自分自身を修正するのを手伝ってくれることを知っています。
私の期待は、BDM ELF ファイルの内容が Trace32 デバッガーと ECM メモリの間でどのように分散されているか、どちらの ELF 形式もデバッグ目的でのみ使用されるため、お互いにどのような利点があるかを理解することです。お客様へのアプリケーション/ソフトウェアのリリースに関しては、お客様が ECM にフラッシュする FLS 形式でリリースすることに注意してください。
私の質問への回答を進めるために、さらに情報が必要な場合はお知らせください。
c++ - 私のクロスコンパイラは常に同じファイルをコンパイルします
クロスコンパイラが機能していることを確認するためにテストしています。hello world をコンパイルすると正常にコンパイルされるように見えますが、hello.cpp を 1000 回ループする同じプログラムに変更すると、生成される elf ファイルはまったく同じサイズになります。どのような変更を加えても、ファイルは常に同じサイズであり、私が知る限り、内容は同じです。これは何が原因でしょうか?
linker - 実行可能ファイルのリンク
ELFファイルを手動でリンクする方法を理解しようとしています。ファイル構造を知っていますが、再配置可能なオブジェクトがリンクされる順序をどのように決定しますか?
linux - ELF ファイルのセクションを並べ替える簡単な方法
ELF ファイルのセクションを並べ替える簡単な方法を探しています。すべてを特定の順序で整列させたい一連のカスタム セクションがあります。
私が見つけた唯一の方法は、リンカー スクリプトを使用することです。ただし、ドキュメントには、カスタム リンカー スクリプトを指定するとデフォルトが上書きされることが示されています。デフォルトのリンカー スクリプトには多くのコンテンツが含まれており、3 つのセクションを常に特定の順序でまとめるためだけに、カスタム スクリプトで複製する必要はありません。そのようなリンカーの動作をハードコーディングするのはあまり柔軟ではないようです。
なぜ私はこれをしたいのですか?実行時のメモリ位置 (先頭と末尾) を知る必要があるデータのセクションがあります。そこで、2 つの追加セクションを作成し、それらにセンチネル変数を配置しました。次に、これらの変数のメモリ位置を使用して、メモリ内の未知のセクションの範囲を知りたいと考えています。
上記の例では、.targetSection のデータが markerA と markerB のアドレスの間にあることがわかります。
これを達成する別の方法はありますか?現在実行中の ELF イメージを読み込み、セクションの場所とサイズを決定できるライブラリはありますか?
linux - ELF ファイルに複数のシンボル テーブルを含めることはできますか?
ELF ファイルに複数のシンボル テーブルを含めることはできますか? なんか標準化されてる?
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出力:
セクションヘッダー:
gcc - 共有ライブラリが独自のベースアドレスを取得する方法
すべてのシンボルのオフセット アドレスがあります (libelf を独自のバイナリ .so で実行して取得)。ここで、実行時に、これらすべてのシンボルの絶対アドレスを計算する必要があります。そのためには、ベース アドレス (共有ライブラリが読み込まれる場所) を取得して計算を行う必要があります。
symbol_address = base_address + symbol_offset
共有ライブラリが独自のベースアドレスを取得するにはどうすればよいですか? Windows では、DllMain に渡されたパラメーターを使用しますが、Linux に同等のものはありますか?
gcc - オブジェクト ファイルのストリップを解除するにはどうすればよいですか?
削除されたオブジェクト ファイルを削除するにはどうすればよいですか?
elfutils の eu-unstrip でこれを作成できますか?
再コンパイルせずに zImage カーネルを vmlinux に変換するには、これが必要です。
これは私のスクリプトの一部です:
しかし、私の結果の vmlinux には ELF ヘッダーが含まれていないため、不明な形式になっています。これらのヘッダーを回復するにはどうすればよいですか?
visual-studio - objdumpELFおよびWindows
私はこのテーマ、つまりELFやLinux関連のものにかなり慣れていません。ELFファイルを書き込もうとしていますが、WinXPで書きたいと思っています。
私の質問は、これはコンパイルを含めてMS Visual Studioで実行できますか?私の理解では、ELFファイルはWindowsOSでコンパイルできません。まあ、少なくともそれは私のグーグルの研究が私に発見したものです。Linux OSをセットアップして、そこでコンパイルする必要がありますか?
objdumo(GNU binutilsの一部)を使用してWindowsXP上のELFファイルを分析できますか?
ヘルプとリンクは大歓迎です。