Machine-independant handling of registers set with ptrace is tough.
granted14 at yahoo.com
Mon Jan 31 21:48:55 CET 2005
I'm actively into the process of hatching at the
Fiasco-UX source-code, and have found the ptrace(2)
interface to be quite entertaining.
Firstly, the naming convention (ptrace macros) differs
from Linux to FreeBSD. However, its relatively trivial
to fix (thx to Alexander Julliard), by adding
#define PTRACE_PEEKTEXT PT_READ_D
Secondly, a lot of things is done in `Usermode.cpp'
in order to manipulate user-visible register set.
In particular, I have to trust the effectiveness and
the reliability of the following constructor:
// save it to <machine/reg.h>
struct user_regs_struct regs;
regs.xfs = context->uc_mcontext.gregs[REG_FS]
In comparison, the FreeBSD kernel implements
the ptrace(2) proc_[read/write]_register(proc,regs)
for doing this kind of stuff, but its not even
close to be a member of uc_mcontext.
All in all, it would be nice to know how (and why)
this is done on different arch, and finally if the
uc_mcontext.gregs constructor is the sole
alternative to registers translation.
Post your free ad now! http://personals.yahoo.ca
More information about the l4-hackers