katsuhiro -> katsuhiro/refmon
ptrace によるリファレンスモニタ†
ptrace を用いてリファレンスモニタを書くときの話題など。
システムコール一覧†
i386
/usr/src/linux/arch/i386/kernel/syscall_table.S
arm
/usr/src/linux/arch/arm/kernel/calls.S
名前が微妙に違うので、/usr/src/linux/include/unistd.h から作ったほうがいいかもしれない。
メモリマップを変更する可能性のあるシステムコール†
sys_brk, sys_mmap, sys_mmap2, sys_munmap
他にもあるかなあ。
暫定ベンチマーク†
- 環境
- CPU: Intel Celeron/2.5GHz
- Mem: 512MB
- Make: GNU Make 3.80
- g++: Debian 1:3.3.5-13
コマンドは
make
cp refmon refmon_
make clean
time ./refmon_ 1 make
でリファレンスモニタ自身の make にかかる時間を測定している。
2006年 3月 24日
重要なファイルの一覧†
- 全般
- /usr/include/sys/user.h
- /usr/include/asm/user.h
(ptrace(2) で読み込める USER 領域の定義など)
- シグナル関連
- /usr/arc/linux/kernel/signal.c
- wait 関連
- /usr/src/linux/kernel/exit.c
(sys_wait4, sys_waitpid の実装部分)
- ARM 関連
- /usr/src/linux/arch/arm/kernel/entry-common.S
(system_call など)
- i386 fork 関連
- /usr/src/linux/arch/i386/kernel/entry.S
(system_call, syscall_trace の呼出し)
- /usr/src/linux/arch/i386/kernel/process.c
(sys_fork, sys_vfork, sys_clone の実装部分)
- /usr/src/linux/arch/i386/kernel/ptrace.c
(sys_ptrace の実装部分)
- /usr/src/linux/kernel/fork.c
(カーネル関数 do_fork の実装部分)
- sigreturn 関連
- /usr/src/linux/arch/i386/kernel/signal.c
(sys_sigreturn, sys_rt_sigreturn の実装部分)