1

私はubuntu 13.10を使用しており、この小さなストリップ+パックされたelfファイルがあります。自動化された方法でプロセスからさまざまな情報をダンプする必要があるため、strace と同様に、進行状況を追跡する小さなトレーサーをハックしました。次の 3 つの疑問が生じました。

1) プロセスにアタッチした後、そのイメージベースを取得するにはどうすればよいですか?

2) プロセスが最初に中断するのはどこですか? どうやら番組のEPではないようです。

3) .so/.lib ファイルがロードされたときに通知を受け取る方法はありますか? GDBは何とかこれを行うことができると思います。

最初の質問は本当に最も重要なものです。どんな助けでも大歓迎です。

4

1 に答える 1

2

1) /proc/ <PID>/maps には、実行可能ファイルからマップされたページを含む、プロセスがマップされたすべての場所のリストが含まれます。実行可能な ELF ヘッダーを読み取ることで、.text がどこにあるかを把握できるはずです。

2) 動的にリンクされたバイナリの実行は、通常、インタープリターから開始されます。ELF 実行可能ファイル ( でダンプ) のINTERP プログラム ヘッダーには、readelf -eその名前が付けられます。実行が開始されるのは、インタープリターのエントリ ポイントです。通常、これは実行時リンカーld-<some-variant>.soです。実行可能ファイルのセクションにマップされ、必要な共有ライブラリもマップされる場合があります。

3) GDB は、実行時リンカーがどのように実装されているかについてかなり詳細な知識を持っているため、適切な場所にブレークポイントを設定することで、動的なオブジェクトの読み込みをインターセプトできます。同じことができます。dlopen() は、インターセプト ポイントの良い候補のようです。#2 で述べたように、実行可能ファイルが制御を取得する前に、共有オブジェクトがプリロードされている可能性があります。

于 2013-11-14T20:07:46.170 に答える