問題タブ [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.
python - ELFファイルのDWARFデバッグ情報を読み取るためのライブラリ
ELFファイルのデバッグ情報をDWARF形式で読み取るための優れたクロスプラットフォームライブラリに関する推奨事項はありますか?PythonプログラムでDWARFデバッグ情報を読みたいのですが。
executable - .o オブジェクト ファイルと .so ライブラリ ファイルの違いは何ですか?
タイトルが示すように、「プログラム オブジェクト ファイル」(.o 拡張子) と「ライブラリ ファイル」(.so 拡張子) の違いは何ですか?
header - ELFに必要なダイナミックライブラリを知る方法は?
ヘッダーを読み取ると、Linux実行可能ファイルの実行に必要なダイナミックライブラリの名前が出力されるツールはありますか?
ソース(GDBのPythonブランチ)から構築したばかりのバイナリに奇妙な依存関係(つまり、あまり標準的ではない)があるかどうか、またはほとんど静的にリンクされているかどうかを知る必要があります。makefileを読むよりも簡単だと思います...
c - プログラムがメモリにロードされて実行される方法を理解するための実践的な演習
実行可能ファイルをメモリにロードする、共有ライブラリを動的にロードするなど、main()が呼び出される前に発生したことが気になります。実践的な演習でこれらのことを理解する方法について何か提案はありますか?
ツールと私が知っていること、そして今使っていることには、次のものが含まれます。
- strace
- 分解する
- readelf
- / proc / pid / map
注:私は優れた本のリンカーとローダーを知っていますが、実践的な演習は本を読むよりも私によく教えてくれるかもしれません。
c - 初期化されていないグローバル変数は、初期化後にどこに行きますか?
学ぶときに少し問題がありました。Cの初期化されていないグローバル変数が、実行可能ELFファイルの.bssセクションに割り当てられていることを知っています。しかし、私がそれらを使い始めると、それらはどうなりますか?つまり、彼らはヒープまたは他の場所に場所を取得しますか?
(まだ初期化されていない)グローバル変数のアドレスを次のように出力して調べようとしました
これは常に同じ値を返します0x80495bc...なぜですか?
c++ - サイズの異なるgccコンパイル済みバイナリ?
gcc を使用して同じコードを別の時点でビルドすると、結果のバイナリの内容が異なります。わかりました、私はそれについてワイルドではありませんが、それはそれです.
しかし、最近、同じバージョンの gcc でビルドされた同じコードが、以前のビルドとは異なるサイズ (約 1900 バイト) のバイナリを生成する状況に遭遇しました。
これらの状況のいずれかを引き起こしている可能性があるものを誰か知っていますか? これはある種のELFの問題ですか?バイナリの内容をダンプして正確に何が違うのかを確認するために使用できるツールは (ldd 以外に) ありますか?
前もって感謝します。
c - ロード時のELF再配置
Linuxで単純なユーザースペースELFローダーを書いています(なぜ?'fun'の場合)。現在の私のローダーは非常にシンプルで、位置に依存しないコードを含む静的にリンクされたELFファイルのみをロードするように設計されています。
通常、プログラムがカーネルのELFローダーによってロードされると、プログラムは独自のアドレス空間にロードされます。そのため、データセグメントとコードセグメントは、ELFセグメントで指定されている正しい仮想アドレスにロードできます。
ただし、私の場合は、を介してカーネルからmmap
アドレスを要求しており、ELFセグメントで要求されたアドレスを取得する場合と取得しない場合があります。コードセグメントは位置に依存しないため、これは問題ではありません。ただし、データセグメントが予期されたアドレスにロードされていない場合、コードはデータセグメントに格納されているものを適切に参照できません。
実際、私のローダーは、データを含まない単純なアセンブリ実行可能ファイルで正常に動作しているように見えます。しかし、データセグメントを追加して参照するとすぐに、実行可能ファイルが正しく実行されないか、SEGFAULTが実行されません。
可能であれば、データセグメントへの参照を修正して、正しい場所を指すようにするにはどうすればよいですか?この目的のために(静的)ELFファイルに保存されている再配置セクションはありますか?
c++ - C++ グループ / dynsym セクションをキャッチする GNU LD スクリプト
ELF32 リロケータブルを RDOFF2 形式に変換できるツールを維持しています。
このプロセスを機能させるには、現在以下に示す ld スクリプトを使用している入力ファイルを事前にリンクする必要があります。
目標は、入力ファイルを削減して、、、、、およびセクションのみを含むようにすること .text
です.data
。.bss
.strtab
.symtab
.shstrtab
現在のバージョンは C コードでは正常に動作しますが、C++ では機能しません。/g++
は、私の C++ シンボルのいくつかにちなんで名付けられたld
タイプのセクションを生成するようです。SHT_DYNSYM
私の質問:提供されたリンカースクリプトをどのように変更して、これらの浮遊シンボルをキャッチしますか?
これが私のソースの例です:
(興味深いセクションのみ)の出力objdump -h
:
と同じファイルreadelf -S
linux - vmlinux ELFは、指定された構造体のメンバーのオフセットを検索します
Linuxカーネルでは、使用されている構造体のメンバー変数のオフセットを見つける必要があります。たとえば、タイプtask_structのinit_taskの場合、そのpidとtasksのオフセットが必要です。
このために存在するのはvmlinuxだけです。オープンソースのカーネルコードを参照することはできますが、私が持っているビルドとは異なる場合があります。
ソースなしでオフセットを取得することは可能ですか?
編集:vmlinuxはARM用であり、ターゲットデバイスでCコードを実行できるとは限りません。
java - .soファイルを.jnilibファイルに変換する
.so
Linux用にELF形式でコンパイルされたライブラリがあります。これはJavaプログラムで使用されています。このアプリケーションをMacOSXに移植しようとしていますが、OSXがこれらのファイルに異なる拡張子を使用していることを発見しました.jnilib
。PATH
ファイルが正しく検出されるようにを設定する方法はすでに理解しています。ただし、OS X Javaは.so
ファイルをロードできません(他の拡張子を想定しているため)。
ファイル拡張子をからに変更する.so
と.jnilib
、JVMはファイルを見つけることができますが、読み取ることができません(ファイルが正しくコンパイルされていないため)。
LinuxシステムまたはMacOSXのいずれかで、ソースコードなしで.so
これらのファイルを変換する方法はあります.jnilib
か?これは不可能だと思いますが、Stack Overflowはまだ失敗していません。また、「不可能」を失敗とは見なしません。