問題タブ [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.
linux - 特定の共有 ELF ライブラリの関数をフックする方法は?
LD_PRELOAD はプロセス全体でいくつかの関数をフックしますが、動的にリンクされた 1 つのライブラリに対してのみ特定の関数をその名前でフックする必要があります。
symbols - readelfによって表示されるシンボルテーブルの列の意味は何ですか?
誰かがシンボルテーブルに表示されている列を使用して説明できますreadelfか?
c - バイナリファイル形式(PEおよびELF)の読み取りおよび書き込みのライブラリはありますか?
こんにちは、
PEファイルとELFファイルの両方で動作できるWindows用のバイナリファイル形式のビューアを作成したいと思います。すでにそこにあるものと同様:
- PEエクスプローラーhttp://www.pe-explorer.com/
- PE VIew: http: //www.magma.ca/~wjr/
- PEBrowse Professional http://www.smidgeonsoft.prohosting.com/pebrowse-pro-file-viewer.html
「さらに別のバイナリビューア」を書きたい理由があります。
PEおよびELFファイル形式を読み取るためのCライブラリはありますか?私はGnubinutilsのソースコードをダウンロードし、それが約25のプロセッサアーキテクチャで約50のファイル形式をサポートすると主張するバイナリファイル記述子ライブラリを使用していることを理解しました。基本的にPE形式がほとんど使用されないLinux用のライブラリであるため、完全なPE仕様を実装しているかどうかはわかりません。さらに、ライブラリのソースコードは私にとって少し複雑で冗長なようです。
c - ELF ファイル形式では、sh_addr は常に sh_offset と同じですか?
最近 (もう学校はやめて) ELF ファイル形式について独学しています。私は主に次のドキュメントに従っています: http://www.skyfree.org/linux/references/ELF_Format.pdf。
すべて順調に進んでおり、ELF ファイルのセクションに関する情報を提供するために、次のプログラムを作成しました。
いくつかのファイルで数回実行した後、奇妙なことに気付きました。'.text' セクションは、常に非常に低い仮想アドレス (1000h 未満) で始まります。しばらく gdb を調べてみたところ、すべてのセクションで sh_addr が sh_offset と同じであることに気付きました。
これは私が混乱しているものです-Elf32_Shdr.sh_addrは「最初のバイトが存在するアドレス」であると文書化されていますが、Elf32_Shdr.sh_offsetは「ファイルの先頭から最初のバイトまでのバイトオフセット」であると文書化されています関数で」。両方が当てはまる場合、両者が等しいということは私にはあまり意味がありません。どうしてこれなの?
ここで、初期化されていないデータ (.bss だと思います) を含むセクションがあることを知っているので、そのデータがファイルに表示されず、プロセスのメモリに表示されることは理にかなっています。これは、前述のセクションの後に続くすべてのセクションについて、その仮想アドレスを把握することは、単純な変数よりもはるかに複雑であることを意味します。
そうは言っても、実際にセクションの仮想アドレスを決定する方法はありますか?
c++ - ELF ファイル形式
g++ を使用してコンパイルした elf ファイルの 16 進ダンプを、設計したプロセッサ シミュレーションに手動でロードしようとしています。標準の elf ファイルには 30 のセクションがあり、適切なメモリ位置のオフセットを考慮して 30 のセグメントすべてをロードしています。.text次に、セクションの先頭 (00400130)でプログラム カウンターを開始しますが、プログラムが正しく実行されていないようです。SPIM をゴールド スタンダードとして使用して、プロセッサの設計を比較的徹底的に検証しました。奇妙なことに、アセンブリ ファイルを SPIM にロードし、ソフトウェアによって生成された逆アセンブルさ.textれ.dataたセクションをプロセッサのメモリにロードすると、プログラムが動作します。これは、私がやりたいこととは異なります。
- C++ プログラムを書く
- mipseb-linux-g++ (クロス コンパイラ) を使用してコンパイルします。
- すべてのセクションを独自のファイルに16進数でダンプします
- ファイルを読み取り、コンテンツをプロセッサの「メモリ」にロードする
- プログラムを実行する
ELF ファイルのどこにプログラム カウンターを最初に配置する必要がありますか? .text私は今の初めにそれを持っています。また、プログラムが正しく動作するためには、 .textandを含めるだけでよいのでしょうか? .dataここで何が間違っていますか?
c - 位置に依存しないコードの違い: x86 と x86-64
私は最近、次のような x86-64 アーキテクチャを対象とした特定の共有ライブラリ (ELF) を構築していました。
これは次のエラーで失敗しました:
共有オブジェクトを作成する場合、「ローカル シンボル」に対する再配置 R_X86_64_32 は使用できません。-fPIC で再コンパイル
もちろん、位置に依存しないコードとして再構築する必要があることを意味するため、共有ライブラリにリンクするのに適しています。
しかし、これはまったく同じビルド引数を使用して x86 で完全に機能します。-fPIC問題は、x86 での再配置は x86-64 とどう違うのか、そして前者でコンパイルする必要がないのはなぜですか?
c - ELF バイナリの動的セクションを変更するためのツール
ELF バイナリの動的セクションにある共有ライブラリ エントリを変更するツールはありますか? バイナリで共有ライブラリの依存関係を明示的に変更したい (つまり、既存のライブラリへのパスをカスタム パスに置き換える)
c++ - コンパイルされたC++クラスはどのように見えますか?
アセンブル命令とCプログラムのバックグラウンドがあれば、コンパイルされた関数がどのように見えるかを視覚化できますが、コンパイルされたC++クラスがどのように見えるかについてこれほど慎重に考えたことはありません。
私は走った:
しかし、私が得たものは私には理解するのが難しいです。
誰かが私を説明するか、いくつかの良い出発点を提案してもらえますか?
c - コンパイルされた構造体の定義はCではどのように見えますか?
重複の可能性:
コンパイルされたC ++クラスはどのように見えますか?
こんにちは、みんな、
オブジェクトファイルstruct.oはelf形式です。このオブジェクトファイルに何が含まれているのかを理解しようとしています。ソースコードは構造体の単なる定義です。ここには実行可能ファイルがないため、テキストには何も含まれないはずであり、実際にはデータもありません。では、構造体の定義は実際にはどこに行くのでしょうか?
使ってみました。
しかし、これを完全には理解していません。
ありがとう、
ジャグラティ
linux - Linux での共有ライブラリの変更
ソースコードを取得せずに Linux で共有ライブラリ (.so) を変更することは可能ですか?
LD_PRELOAD については知っていますが、それは共有ライブラリ自体で使用される関数に役立ちますか?
バイナリ ELF ファイルを逆コンパイル/逆アセンブルしてから再コンパイル/再アセンブルする方法はありますか?