From: Matt Z. <md...@de...> - 2003-12-28 10:12:48
|
On Sun, Dec 28, 2003 at 01:51:15AM -0800, Matt Zimmerman wrote: > This is making less and less sense. handle_trap has this code: > > syscall_nr = PT_SYSCALL_NR(regs->skas.regs); > UPT_SYSCALL_NR(regs) = syscall_nr; > if(syscall_nr < 1){ > relay_signal(SIGTRAP, regs); > return; > } > > As I understand it, PT_SYSCALL_NR refers to ORIG_EAX, and UPT_SYSCALL_NR > refers to skas.syscall. i.e., syscall=0 can't happen. So either things are > not as they seem, or something is happening to regs between here and > execute_syscall_skas. [a few hundred printf's later] So, the sequence of events in handle_trap is this: 1. UPT_SYSCALL_NR(regs) == 78 2. ptrace(PTRACE_POKEUSER,...) 3. UPT_SYSCALL_NR(regs) == 78 (still OK) 4. ptrace(PTRACE_SYSCALL,...) 5. UPT_SYSCALL_NR(regs) == 78 (still OK) 6. waitpid(pid,...) 7. UPT_SYSCALL_NR(regs) == 0 (boom) I have no idea why. -- - mdz |