問題タブ [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.
executable - windowsプロセスのメモリセグメントを表示する方法は?
実行可能ファイルの内容を表示するobjdump、readelf、Dambinなどのツールがあります。
ただし、実行可能ファイルがメモリに読み込まれる (プロセスが作成される) とき、メモリ内のセグメントは通常、実行可能ファイル内のセグメントとは異なります。たとえば、ロードされると、スタックとヒープという 2 つの追加セグメントが割り当てられます (ここでは、ページ マッピングの詳細を見落としています)。
プロセスのインタイム メモリ セグメント/ステータスを表示するのに役立つツールはありますか?
gcc - ELF 変更セクション フラグ
gcc を使用して C コードをコンパイルし、readelf を使用して ELF のセクションをチェックすると、.data セクションのフラグが WA (書き込み可能および割り当て可能) に設定されていることがわかります。
これらのフラグを変更することは可能ですか? このセクションを実行可能にできますか?
このバイナリをデバッグするために gdb を使用しています。特定の時点で .data セクションのフラグを実行可能として設定したいと考えています。では、これは gdb または gcc を使用して実行できますか?
elf - readelf からの再配置テーブルの出力について
たとえば、次のコマンドを実行します。
次の出力が得られます。
この出力が理解できないので、説明が必要です。
1 列目のオフセットは、これらのシンボリック参照が .text セグメントのどこにあるかを示していますか? Info 列と Type 列の意味は何ですか? 再配置はシンボル参照を定義にマップしただけだと思ったので、異なる型がどのように存在するのか理解できませんか? 特定のシンボル名の値のアドレスが 0 になっているのはなぜですか? それらがすべてテキスト セグメントの同じ場所にマップされているとは思えません。最後に、再配置テーブルが最終的な実行可能ファイルに存在するのはなぜですか? 余分なスペースを占有しませんか?また、実行可能ファイルを生成する最後のリンク コマンドのすべての参照は既に解決されていますか?
c - オブジェクトファイルを比較して変数の変更を見つける
したがって、32ビット環境では「.c」ファイルをコンパイルします。
あおを救います。
Ac に次のような変数があるとします。
変更後、コンパイルして別の Ao を取得します
「 cmp Ao Ao 」を実行すると、これらのファイルが異なることがわかります。ここで私の質問は、「.o」ファイルを比較することで正確に何が変更されたかを見つけることができますか.
アセンブリ コードを取り出して diff を実行していますが、頭と尻尾を作ることができません。誰かがよりスマートな方法を提案できますか。
assembly - GNU Assembler では、名前の先頭にあるドットは何を意味しますか?
以下はマイクロプロセッサ起動ファイルからの行で、GNU アセンブラに次のように入力するためのものです。
名前の最初のドットには.isr_vector
何か特別な意味がありますか? PS: この名前は GNU リンカldによって参照されます。
編集:
この名前は、セクション ヘッダーとして readelf 出力にも表示されます。
elf - readelf: エラー: ELF ファイルではありません - 先頭に間違ったマジック バイトがあります
私はプログラムを構築し、それはうまく動作します (私はこのプログラムを実行できることを意味します)。しかし、「readelf」を使用してデバッグ情報があるかどうかを確認すると、エラーが発生します。
私の Linux ディストリビューションは Ubuntu-12 です。誰かが私を助けることができますか?
linux - ld リンカーで使用できるすべてのシンボルを一覧表示する
私は (linux) gcc 4.8.2 でコンパイルされた小さな静的ライブラリを -fvisibility=hidden で共有ライブラリにリンクしています (C コードの gcc と Fortran コードの ifort の 2 つのバージョンがあります)。スタティック ライブラリは、いくつかの内部関数で構成されており、すべて "ST_LIB_" という接頭辞が付いています。
静的ライブラリで宣言された関数が、共有ライブラリにリンクされている実行可能ファイル/ライブラリで使用できないことを確認したいと思います。Linux で、プレフィックスを持つ関数が外部ライブラリで使用できないことを確認するための最適なコマンドは何ですか?
私が試してみました:
nm --dynamic shared_lib | grep -i "ST_LIB_" | wc -l
(出力 0)
readelf -d shared_lib | grep -i "ST_LIB_" | wc -l
(出力 0)
nm -g shared_lib | grep -i "ST_LIB_" | wc -l
(共有ライブラリに応じて 26 または 0 を出力)
readelf -s shared_lib | grep -i "ST_LIB_" | wc -l
(共有ライブラリに応じて 26 または 0 を出力)
readelf -Ws shared_lib | grep -i "ST_LIB_" | grep -i "HIDDEN" | wc -l
(共有ライブラリに応じて 26 または 0 を出力)
gdb - 関数プロトタイプをelfファイルから抽出するには?
私はこの質問に対する答えを見つけることに成功していません。
GDB を使用すると、"call" コマンドを使用して関数のプロトタイプを取得できます。例:
そのため、GDB は elf ファイルからのみ、fn() が void を返し、引数として 2 つの整数を取ることを把握できます。
ただし、elf ファイルから関数プロトタイプを抽出するには、他のツールを使用する必要があります。できれば、objdump / readelf を使用したいと考えています。
これが可能かどうか誰にもわかりますか?それが不可能な場合、GDB はどのようにそれを行いますか? 関数プロトタイプが保存されているのは、elf ファイルのどのセクションですか?