0

自分用にvsyscallページのアドレスを取得したいです。ここで考えられるのは 2 つだけです。コンパイラを変更して、この情報が __start に渡された後に既知の場所に格納されるようにするか、/proc/[pid]/maps を読み取るかです。/proc/ は遅くて必要ないので、本当に読みたくありません。また、コンパイラの変更も行いたくありません。誰かが代替手段を持っていますか?知っておくべきシンボルはありますか?

その時点で、私はこの機能を、この作業の一部として開発したモジュールの ioctl 呼び出しに詰め込みたいと思っています!

4

1 に答える 1

0

これが暗闇の中での刺し傷です:

プロセス スタックが開始されたアドレスを特定できれば、 に提供されたパラメータを見つけることができる可能性があります__start。その後、初期スタック ポインターからの対応するオフセットに設定された適切な型のポインターを介して、パラメーターにアクセスできます。

Hyouck "Hawk" Kim による記事How main() is execute on Linux によると、 の最初のいくつかの命令は、__startを呼び出す前に決定論的な方法で初期引数を書き込みます__libc_start_main

__start明らかに、このようなアプローチはプラットフォーム固有であり、実装が変更された場合に不安定になる可能性があります。

于 2010-03-08T22:19:04.833 に答える