Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Aug 2007 08:48:29 +0400
From:      "Yuriy Tsibizov" <yuriy.tsibizov@gmail.com>
To:        "Kostik Belousov" <kostikbel@gmail.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: modify syscall nr on-the-fly
Message-ID:  <c019b3090708202148l5390b4fex7e17f6a645253b25@mail.gmail.com>
In-Reply-To: <20070820160853.GS2738@deviant.kiev.zoral.com.ua>
References:  <c019b3090708180301r1e4153av72c27bcc9aaceb2e@mail.gmail.com> <20070820160853.GS2738@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
2007/8/20, Kostik Belousov <kostikbel@gmail.com>:
> On Sat, Aug 18, 2007 at 02:01:26PM +0400, Yuriy Tsibizov wrote:
> > I'm trying to get user-mode Linux to run under FreeBSD Linux emulation (on
> > i386).
> >
> > User-mode Linux in it's start-up tests tries to modify syscall number (to be
> > called by kernel) on-the-fly
> > (http://fxr.watson.org/fxr/source/arch/um/os-Linux/start_up.c?v=linux-2.6).
> > It forks a child thread that stops
> > (using SIGSTOP), calls getpid() (that will be intercepted by parent thread
> > using PTRACE_SYSCALL)
> > and return some value based on getpid() results. Main thread waits for
> > SIGSTOP in child process and
> > enables PTRACE_SYSCALL (I have some code that implements it. It makes some
> > incompatible changes
> > to PT_SYSCALL that will break FreeBSD applications, but works for Linux
> > apps). When main thread
> > catches SIGTRAP (generated by ptrace) it tries to modify EAX of child thread
> > (with PTRACE_PEEKUSR
> > and PTRACE_POKEUSR) to replace getpid syscall with getppid.
> >
> > is it possible to get updated EAX (and other registers as well)  in
> > syscall(...) after ptracestop(...) in PTRACESTOP_SC(...) returns?
> >
> > Hope for your help,
> >
> > Yuriy.
>
> If I understand right what you want, I doubt that existing code would
> allow you to change syscall number in debugger process for debuggee.
> You shall look at the sys/i386/i386/trap.c, syscall() function [adjust
> as needed for other arches]. It calculates callp before doing PTRACESTOP_SC,
> as well as copies the syscall arguments into the kernel address space.

Yes, I know this. I'm going to recalculate callp after PTRACESTOP_SC.
And, there will be no need to copyin from user space -- all syscalls
parameters are passed in registers (it will be used only for processes
running under Linux emulation).

I know that there is no real use for this feature for native code.

Yuriy



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?c019b3090708202148l5390b4fex7e17f6a645253b25>