5

関数のトレーサーを少し書きたいと思います。私はptraceを使っています。

CALL命令を見たときに、アドレス呼び出しに相当する関数名を表示したい。

私のトレーサーは、絶対アドレスを持つシンボルで動作します (シンボルはメイン バイナリで定義されます)。しかし、共有ライブラリの関数の仮想メモリ内の絶対アドレスを取得する方法がわかりません。たとえば、libc の関数の呼び出しを検出します。

共有ライブラリ内の関数のアドレスがファイルに対して相対的であることに気付きました。

次の式は良いですか?

Absolute address of symbol = address of the shared library in virtual memory +
                             relative address of the symbol.

共有ライブラリからシンボルの絶対アドレスを取得するにはどうすればよいですか?

4

3 に答える 3

2

動的リンクがどのように機能するか、特にグローバルオフセットテーブルを調べたいと思います。http://www.gentoo.org/proj/en/hardened/pic-guide.xmlは一種の出発点ですが、これをシステム間で確実に機能させるのは難しいかもしれません。

于 2010-02-25T00:13:24.743 に答える
1

「Linkers and Loaders」という本には、そのような質問に対する回答と背景説明が含まれています。読む価値があるかもしれません。ELF に当てはまることは Windows には当てはまりませんが、この本はその両方をカバーしており、他のいくつかのシステムもカバーしています。

于 2010-03-23T00:24:22.793 に答える
0

作業しているシステムについて説明しなかった場合、この記事では、少なくとも説明されたタスクがすべてではなく、いくつかのケースで解決できることを明確にします。
私があなたの立場なら、メモリとライブラリで対応するバイナリ フラグメントを検索します。次に、メモリとライブラリが整列するとすぐに、問題は解決されます。そうです、ライブラリを分割して独立したパーツとしてロードできないとすぐに、方程式は適切です。

于 2010-02-09T10:51:56.603 に答える