問題タブ [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 投票する
6 に答える
6501 参照

python - MIPS バイナリの分析: バイナリ データを解析するための Python ライブラリはありますか?

私は、16 進アドレスをシンボリック関数名とバイナリ内のソース コード行番号に解決する必要があるユーティリティに取り組んでいます。このユーティリティは Linux on x86 で実行されますが、分析するバイナリは MIPS ベースの組み込みシステム用です。MIPS バイナリは ELF 形式で、シンボリック デバッグ情報に DWARF を使用します。

現在、objdump をフォークして、16 進アドレスのリストを渡し、出力を解析して関数名とソース行番号を取得することを計画しています。MIPS バイナリをサポートする objdump をコンパイルしましたが、動作しています。

別のプロセスをフォークすることなく、Python コードからネイティブに検索できるパッケージを用意したいと考えています。python.org で libdwarf、libelf、または libbfd についての言及も、dwarfstd.org での python についての言及も見つかりません。

どこかに利用可能な適切なモジュールはありますか?

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

encoding - ELF の NEEDED エントリの標準エンコーディングはありますか?

私は自分のコードの一部を純粋な ascii 以外のシステムにもう少し使いやすくしようとしていますが、ELF バイナリの NEEDED エントリに使用される特定の文字エンコーディングがあったのか、それともかなり標準的ではなく、作成システムに基づいているのか疑問に思っていましたファイルシステムのエンコーディング(または、バイナリを作成したものに渡されたバイトだけでも直接)(もしそうなら、バイナリにエンコーディングを指定する場所はありますか?現在のシステムのエンコーディングが私の使用法ではうまく機能しないと仮定すると) 、ASCII以外の名前はほとんど禁止されていますか、それとも何か他のものですか?

0 投票する
3 に答える
3436 参照

linux - 実行中のLinuxプロセスのメモリアドレス範囲をオブジェクトファイルのシンボルに変換しますか?

ファイル/proc/self/smapsのスニペットを次に示します。

このプロセス(自己)が/lib/ld-2.8.soにリンクされており、(多数のうちの) 2 つのバイト範囲がメモリにマップされていることがわかります。

88kb の最初の範囲 (22 個の 4kb ページ) は共有されており、クリーンです。つまり、書き込まれていません。これはおそらくコードです。

4kb の 2 番目の範囲 (単一ページ) は共有されておらず、ダーティです。ディスク上のファイルからメモリ マップされているため、プロセスが書き込みを行っています。これはおそらくデータです。

しかし、その記憶には何がありますか?

メモリ範囲00b14000 ~ 00b15000を、大きな静的構造体が宣言されているファイルの行番号などの有用な情報に変換するにはどうすればよいですか?

この手法では、execshieldなどによる事前リンクとアドレス空間のランダム化を考慮し、デバッグ シンボルを分離する必要があります。

(動機は、ダーティ メモリを作成する一般的なライブラリを特定し、構造体を const と宣言するなどして修正することです)。

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

linux - GCC / ELF-私のシンボルはどこから来るのですか?

多数の共有オブジェクトに動的にリンクされている実行可能ファイルがあります。(実行可能ファイルにインポートされた)シンボルがどれに属しているかをどのように判断できますか?

複数の可能性がある場合、ldをシミュレーションして、どこから取得されているかを確認できますか?

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

object - ELF と PE の基本的なリンク プロセスのしくみ

リンカがどのように機能するかについて、私はいつも混乱しており、検索するのが難しいテーマです。

私の質問を実証し、回答の枠組みを提供するために、これまでに知っている (または知っていると思う) ことを書き留めておきます。私は非常に間違っているかもしれません。:)

まず、各 .cpp ファイルが中間ファイルに組み込まれます (Posix/ELF の場合は .o、Win/PE の場合は .obj だと思います)。この中間ファイルには、ビルド元の .cpp によって定義されたすべてのシンボルが含まれており、適切に解決する必要がある外部リンクについての指示が含まれています。これの拡張として、Posix システムでは .o ファイルを .a ファイルに結合できます (これは結合以上のことをしていないように見えますが、これはどのコマンドですか?)。.lib は Posix .a ファイルに相当する Win/PE ですか?

次に、中間ファイルがリンクされ、外部依存関係が解決され、実行可能ファイルが作成されます。手順がありませんか?

ありがとう!

0 投票する
3 に答える
2476 参照

assembly - ELF形式の再配置可能シンボル(アセンブリ言語)

クライアントアーキテクチャ用のGNUアセンブラのポートを開発しています。現在直面している問題は次のとおりです。

命令のイミディエートオペランドが複数の再配置可能シンボルを含む式である場合、elf形式の出力ファイルでどのように処理されますか。そのような場合に生成される移転情報はどうなりますか?

例えば:

label1とlabel2が再配置可能セクションで定義されている場合、それらは同じセクションまたは異なる再配置可能セクションである可能性があります。

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

linux - コード インジェクション - Solaris & Linux

サードパーティによって作成された実行可能モジュールがあります。このプロセスに自分のコード (別のスレッドで実行されている一種のウォッチドッグ) を「挿入」したいと考えています。

これまでのところ、2 つの方法が考えられます。1 つは、コードを実行可能ファイルとして実行し、その上にプロセスを動的にロードすることです (非常に難しくてトリッキーなようです)。または、コードを共有オブジェクトにして、LD_PRELOAD を介してロードし、から初期化します。いくつかの静的変数コンストラクター。

これを行うためのより便利な方法はありますか? 私の OS は Linux x86 と Solaris-SPARC です。

更新: 可能であれば、プロセスにパッチを適用するのではなく、コードを動的にロードしたいと考えています。

0 投票する
5 に答える
7206 参照

linux - 共有ライブラリをエルフにパックする

Elfが必要とするすべてのSOを静的に変換し、ElfをSOの無料に変換できるユーティリティはありますか?

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

linux - 書き込み保護された仮想ページ、キャッチ書き込み

書き込み保護されたページへの書き込みをキャッチする方法はありますか?

オブジェクトをコピーしてインスタンス化する自己のようなオブジェクトシステムを計画しています。(他のオブジェクトに比べてシンプルでコンパクトに聞こえるため) 明らかに、この目的のために作成されたオブジェクトは何らかの方法で書き込み保護されている必要があります。ELF のプログラム ヘッダーから書き込み保護されているものにフラグを付ける方法があることを確認しました。(RE、RWE、RW フラグ)

これは書き込み保護を提供しますか? セグメンテーション違反が発生するはずだと覚えていますが、これは本当ですか? 書き込み保護されたページへの書き込みをキャッチする方法。これは私が望んでいるものを実装する良い方法ですか?もっと良い方法はありますか?

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

c - ELF ファイルのバージョン

コマンドのクローンに取り組んでいelfdumpます。

私のプログラムは、すべての実行可能ファイルで実行すると正常に動作elfdump -ecps *file*します。しかし、libc.so などのライブラリ ファイルでプログラムを実行すると、.symtab セクションのすべてのシンボルに対して間違ったバージョン番号が出力されます (具体的には、すべてゼロです)。ドキュメントを何度も見てきましたが、なぜこれが起こっているのかわかりません。

誰かがいくつかのヒントを提供してもらえますか? または、ライブラリであるかどうかを検出する方法を教えてください。