x86_64 Linux 3.0 で syscall を実装しましたが、呼び出しプロセスのスタック ポインター (%rsp) を取得する方法を知りたいです。私のシステムコールは普通のバニラシステムコールです...
私はtask_pt_regs
呼び出し元プロセスのスタック フレームを取得するために使用することに慣れていますが、 からarxh/x86/include/asm/ptrace.h
、struct pt_regs
非トレース syscall がすべてのレジスタを読み取らないことに注意してください: ip、cs、flags、sp、および ss は、CPUsyscall
命令がが呼び出され、実際のシステムコールが呼び出されます。言い換えれば、私のシステムコールtask_pt_regs(current)->ss
ではガベージです。
sys_fork のような呼び出しの場合、arch/x86/kernel/entry_64.S
( PTREGSCALL
) 内の特別なマクロは、sys_fork 関数が適切な pt_regs スタック フレームで呼び出されるように設定します。
sys_fork のようなカスタム システム コールに追加の引数を強制せずに、syscall で IP や SS などの値を抽出するにはどうすればよいPTREGSCALL
ですか?