l4v2: l4linux2.6 Syscall logging via IPC in l4
Adam Lackorzynski
adam at os.inf.tu-dresden.de
Thu Jul 7 22:40:51 CEST 2005
On Thu Jul 07, 2005 at 15:50:13 -0400, Andrew Davenport wrote:
> But I want this capability to be built into the kernel (l4 microkernel), and I
> would rather not use 3rd party packages. Right now Im logging in
> Thread::do_send. I get the trap state as such:
>
> Trap_state *ts = (Trap_state*)_utcb_handler;
>
> from there i get: Unsigned32 intNo = ts->err >> 3;
> and Unsigned32 eax = ts->eax, and so on for ebx, etc...
>
> I am simply looking for an easy to filter out non-linux-syscalls so I only pay
> attention to linux syscalls. I think intNo gets changed somehow bc checking if
> (intNo == 80) does not log anything!
The exception was an int80 if ts->trapno == 0xd and ts->err = 0x402
So this goes like this:
if (ts->trapno == 0xd && ts->err == 0x402)
{
/* int $0x80 exception */
Mword syscall_nr = ts->eax;
Mword param1 = ts->ebx;
Mword param2 = ts->ecx;
Mword param3 = ts->edx;
Mword param4 = ts->esi;
Mword param5 = ts->edi;
Mword param6 = ts->ebp;
/* log something... */
}
How to do the logging itself is another issue. You're probably best off
using the kernel provided stuff, like defining yourself a logging
function for the trace buffer. Depends what you want to do with that
data.
Adam
--
Adam adam at os.inf.tu-dresden.de
Lackorzynski http://os.inf.tu-dresden.de/~adam/
More information about the l4-hackers
mailing list