問題タブ [readelf]
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.
elf - binutils/readelf を使用したシンボル アドレスの決定
私は、検証テスト スクリプトがテスト対象のソフトウェアのビルド内でシンボル アドレスを見つける必要があるプロジェクトに取り組んでいます。これは、ブレークポイントの設定やメモリからの静的データの読み取りに使用される場合があります。私が求めているのは、シンボル名、メモリ内のベース アドレス、およびサイズを含むマップ ファイルを作成することです。私たちのビルドは、必要な情報を含む ELF ファイルを出力します。readelf、nm、および objdumpツールを使用して、必要なシンボル アドレスを取得しようとしています。
私が最初に試したところreadelf -s file.elf
、いくつかのシンボル、特にアセンブラーで記述されたシンボルにアクセスしているように見えました。しかし、私が欲しかったシンボルの多くはそこにありませんでした。特に、Ada コード内で発生したものです。
以前readelf --debug-dump file.elf
はすべてのデバッグ情報をダンプしていました。そこから、Ada コードにあったものを含め、すべてのシンボルが表示されます。ただし、形式はDWARF形式のようです。シンボリック情報をリストするように依頼したときに、これらのシンボルが readelf によって出力されない理由を知っている人はいますか? おそらく、私が見逃しているオプションがあるだけです。
カスタム DWARF パーサーを作成して情報を取得することもできますが、Binutils (nm、readelf、objdump) のいずれかを使用して情報を取得できる場合は、標準的なソリューションを使用したいと思います。
python - PythonでELFファイルの動的セクションを読み取るにはどうすればよいですか
ELF ファイルの動的セクションに関する情報を取得したいと考えています。基本的に、コマンド ラインを使用して取得した情報と同じです。
readelf -d elfFile
arm - ARM ELF オブジェクト内の関数サイズが正しくない
オブジェクト ファイルの readelf 出力:
私が理解している.textセクション構造:
.text セクションのサイズは 0x124 です
セクション サイズが 0x124 で、最後の関数が 0x125 で終了していることに注意してください。不足しているバイトはどうなったのでしょうか?
ありがとう。
gdb - gdb backtrace は、各関数がどのライブラリから取得されたかをどのように認識しますか?
私は簡単なプログラムを書きました。meller1 という関数を呼び出し、meller2 を呼び出し、いくつかの関数が free を呼び出してクラッシュするまで続けます。このプログラムでコアダンプ ファイルを使用して gdb backtrace を実行すると、次のメッセージが表示されます。
私の質問は、gdb bt は free が /lib/libc.so.6 から取得されたことをどのように認識するのでしょうか? Coredump ファイルと実行可能ファイル自体を指定して、自分で手動で行う方法はありますか? ありがとう。
c++ - Linux でのプラグインを使用した C++ プログラムのベスト プラクティス
プラグインを C++ Linux プログラムにロードするためのベスト プラクティスは何かについて、誰かが光を当てることができますか?
プラグイン (libsyntax.so) を備えたプログラム (エディター) があるとします。エディターの構成ファイルには、libsyntax.so ライブラリー (plugin1=/opt/editor/gizmos/libsyntax.so) へのパスが含まれています。エディターは構成を読み取り、次を呼び出します。
すべて問題ありません。
(libsyntax.so) がヘルパー ライブラリ (libcolor.so) に依存しているとします。readelf を実行すると、次のようになります。
ただし、この時点で上記の dlopen() は失敗し、エラーは「そのようなファイルまたはディレクトリはありません」です。LD_DEBUG=all を使用すると、libsyntax.so がロードされた後、メッセージが次のようになることがわかります。
ローダー/リンカーは標準的な場所を探していますが、明らかに、依存関係が見つかりません。これは ldconfig または LD_LIBRARY_PATH で簡単に処理できますが、どちらのソリューションも汚いと感じます。
プラグインと依存関係の両方をロードするクリーンな方法はありますか? どうやってこれをやっていますか?
gcc - ELFファイルのVirtualAddress、LoadAddress、およびPhysicalAddress?
出力セクションの説明に関するldマニュアルによると:
アドレスまたは>regionは、VMA、つまり出力セクションの仮想メモリ アドレスを表します。
AT()またはAT>lma_regionは、LMA、つまり出力セクションのロード メモリ アドレスを表します。
そして、helloworld elf ファイルのセクション ヘッダーとプログラム ヘッダーreadelf -e
をダンプするために、詳細なビューを取得することにしました。結果は以下のとおりです。
私の質問は次のとおりです。
- ダンプされたヘッダーに LMA がないのはなぜですか? LMA は ELF ファイルでどのように表されますか?
- 赤い長方形の Addr 列は何を意味していますか? VMA?
- 緑色の長方形の PhysAddr は何を意味していますか?
追加 1
これまでのところ、PhysAddr は LMA のようです。