問題タブ [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.
compiler-construction - 「セクションからセグメントへのマッピング」は ELF ファイルのどこに保存されますか?
コンパイラをゼロから完全に作成しようとする一環として、現在、ELF ファイルを処理する部分に取り組んでいます。
それらに関するいくつかの記事と仕様をざっと読んだ後でも、セクションからセグメントへのマッピングがどこに保存されているかがよくわかりません。NASM+ld によって生成された小さな実行可能ファイルを観察すると、.text セクションが何らかの形で LOAD タイプのプログラム ヘッダーにマップされていることがわかりますが、どうすればよいのでしょうか?
入力として小さな (動作する) 実行可能ファイルが与えられたときの readelf の出力の小さな部分:
このマッピングは、実行可能ファイルが機能するために必要ですか? または、それらを完全に省略しても、有効な実行可能ファイルを保持できますか?
c++ - 与えられたシンボルを定義するライブラリの名前を出力します
シンボルの名前 (デマングルされているかどうか) と、他のライブラリに動的にリンクされているライブラリの名前があると仮定すると、そのシンボルを解決できるライブラリを見つけたいとします。
を使用しようとしましたが、nm
それに関する適切なドキュメントが見つかりません。このツールでは使用できないようです。objdump
readelf
gdb
似たようなものを提供していますが、これはデバッガーです。簡単なルックアップが必要です。デバッグ セッションを起動せずにこれを行う方法を知っていますか?
linux - readelf コマンドの mips フラグの意味は?
Linuxでコマンド「readelf -h test」(「test」はバイナリプログラムです)を実行し、次のテキストを取得しました:
上記の文章の国旗の意味を詳しく教えてください。
私はそれをグーグルで検索しましたが、答えが見つかりませんでした。コメントをいただければ幸いです。
linux - クロスコンパイラを正しく設定するには、どの項目を参照すればよいですか?
クロスコンパイラの設定については、「readelf -h target.bin」の出力 (ターゲット マシンで target.bin が実行される) を参照しました。クロスコンパイラでコンパイルされたバイナリプログラムの readelf 出力は、target.bin の出力と同じであると想定しました。
ただし、次の場合、「readelf」出力が互いに異なる 2 つのプログラムが、ターゲット マシン上で正常に実行される可能性があります。さらに、target.bin の出力と同様の readelf 出力を持つ別のプログラムは、ターゲット マシンでは実行できません。クロスコンパイラの設定では readelf の出力は重要ではないようです。 では...ターゲットマシンのクロスコンパイラの正しい構成については、何を参照すればよいですか?
例:
readelf -h target.bin (target.bin は、ターゲット マシンで実行されるバイナリ プログラムです) 出力:
readelf -h myfail_target.bin (私がコンパイル) は、ターゲット マシンで実行できません。出力は次のとおりです。
readelf -h mysuccess_target.bin (私がコンパイル) は、ターゲット マシンで実行可能であり、次のように出力されます。
コメントをいただければ幸いです。
linux - readelf がエントリ ポイントを変換する方法
elf ファイルがあり、 readelf -h filename を使用すると、エントリ ポイントが取得されます。さて、このアドレスを自分で計算したいとしましょう [アセンブリを使用しますが、言語は重要ではありません]。
どうやってやるの?
エントリ ポイントがファイルのオフセット 24 から始まる 4 バイトであることはわかっていますが、このデータをアドレスに変換する方法がわかりません。
linux - 絶対パスは、実行可能ファイルの動的セクションの「必要」部分にどのように入るのですか?
単一の lib パスにリンクする実行可能ファイルが多数あります。たとえば、実行可能ファイルは (たとえば)とにfoo
リンクしています。後者は私が自分で作成したものです。サード パーティのライブラリを変数に配置し、ライブラリを 経由でリンクすると、makefile の行は次のようになります。libboost_system.so
libfoo.so
LDLIBS
-lfoo
しかし、readelf
私には自分の道が見えます!
私自身のライブラリは、絶対パスを持つ唯一のライブラリです。
patchelf --replace-needed
makefile のみを使用して、つまりorを使用せずに、この怪物を取り除くにはどうすればよいchrpath
ですか?