katsuhiro > katsuhiro/refmon -> katsuhiro/refmon/ptrace

ptrace 周りの勉強

ネストされたリファレンスモニタを実現するための ptrace の勉強をここにメモしていく。

返ってこないシステムコール

来たときの処理

具体的な関数名

リファレンスモニタは監視対象が発行したシステムコールの呼応関係を保持している。そのため呼び出したら返ってこないシステムコールは重要である。それと、フェイント(?)くさい名前のシステムコールもメモしておく。
(確認に用いた環境のカーネルは 2.4.31 である)
返ってくることを確認した

返ってこないことを確認した

未確認だがおそらく返ってこない

2.6 系と 2.4 系の差

一見似たような動きをするけれども CLONE_PTRACE で子プロセスのトレースをしたときに動きが違うかも??2.6 系でもバージョン間で差がありそうなので要確認。

それと 2.6系では wait 系をエミュレートしなくてもきちんと動いているような気がする。 本当にちゃんと動いているか、要調査。

2.4 と 2.6 系両方で動かすには

2.4 なら一回目の SIGSTOP を無視しても動いたが、2.6 だと最初の SIGSTOP が SIGTRAP の代わりなので、無視すると clone, fork, vfork の引数書き戻しをせずに進んでしまう。

ptrace の困ったところ

SIGTRAP でトレースが知らされる

PTRACE_O_TRACESYSGOOD オプションの使い方

ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_TRACESYSGOOD);

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS