From owner-FreeBSD-tech-jp@jp.freebsd.org  Sun Jul 23 17:46:24 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id RAA03266;
	Sun, 23 Jul 2000 17:46:24 +0900 (JST)
	(envelope-from owner-FreeBSD-tech-jp@jp.FreeBSD.org)
Received: from asao.gcd.org (qmailr@asao.gcd.org [210.145.125.162])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with SMTP id RAA03261
	for <FreeBSD-tech-jp@jp.freebsd.org>; Sun, 23 Jul 2000 17:46:23 +0900 (JST)
	(envelope-from hiroo@oikumene.gcd.org)
Received: (qmail 24428 invoked by uid 10); 23 Jul 2000 15:59:42 +0900
Received: (qmail 10036 invoked from network); 23 Jul 2000 06:34:18 -0000
Received: from chrysanthe.oikumene.gcd.org (HELO localhost) (192.168.0.12)
  by ns.oikumene.gcd.org with SMTP; 23 Jul 2000 06:34:18 -0000
To: FreeBSD-tech-jp@jp.freebsd.org
From: Hiroo ONO (=?iso-2022-jp?B?GyRCPi5MbjQyQDgbKEI=?=) <hiroo@oikumene.gcd.org>
In-Reply-To: <20000717025800T.hiroo@oikumene.gcd.org>
References: <19991111181456M.tshiozak@astec.co.jp>
	<20000716231931F.hiroo@krokinole.oikumene.gcd.org>
	<20000717025800T.hiroo@oikumene.gcd.org>
X-Mailer: Mew version 1.94.1 on Emacs 20.6 / Mule 4.0 (HANANOEN)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Message-Id: <20000723153342C.hiroo@oikumene.gcd.org>
Date: Sun, 23 Jul 2000 15:33:42 +0900
X-Dispatcher: imput version 20000228(IM140)
Lines: 113
Reply-To: FreeBSD-tech-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: FreeBSD-tech-jp 2862
Subject: [FreeBSD-tech-jp 2862] Re: function trace.
Errors-To: owner-FreeBSD-tech-jp@jp.freebsd.org
Sender: owner-FreeBSD-tech-jp@jp.freebsd.org
X-Originator: hiroo@oikumene.gcd.org

$B>.Ln42@8$G$9(B

$B>/$7A0$K(B ltrace-0.3.10 $B$r(B compile $B$9$k$H$3$^$G$$$C$?$N$@$1$l$I$b!"$&$^(B
$B$/F0$+$J$$$H$$$&OC$r=P$7$^$7$?!#(B
% $B$$$^$5$i$J$,$i!"(Btech-jp $B$JOC$8$c$J$$$h$&$K$b;W$&$N$G$9$,!"0lEY=P$7$F(B
% $B$7$^$C$?$N$G!"$3$C$A$GB3$1$5$;$F2<$5$$!#(B

$B$G!"(B

> $B$A$c$s$HF0$$$F$$$^$;$s$h$M!#(Bsyscall $B$H(B sysret $B$7$+=PNO$5$l$J$$$7!"(B

$B$H$$$&>u67$G!"C1$K2#$N$b$N$r=D$K$7$?$@$1$G$OF0$+$J$$$N$G$9$,!"$I$J$?$+(B
$B8+$FD:$$$F!"$I$3$i$X$s$,$*$+$7$$$N$+65$($F2<$5$k$+!"$=$b$=$bC1$KDj?t$r(B
$BBP1~$7$=$&$J$b$N$K=q$-49$($?$@$1$G$OBLL\$JM}M3$,$"$l$P@bL@$7$F$$$?$@$1(B
$B$J$$$G$7$g$&$+!#(B
% $B$F$-$H!<$K0\$9$N$G$O$J$/$F!"(Btruss $B$H$+;29M$K$7$F$A$c$s$H$+$+$J$$$H$$(B
% $B$1$J$$$N$G$7$g$&$+!D!#(B

$B8=>u$G$9$,!"(BELF $B$N<B9T%U%!%$%k$+$i(B symbol $B$rFI$`$3$H$O$G$-$F$$$F!"(B
ptrace(PT_TRACE_ME,...) $B$d(Bptrace(PT_ATTACH,...) $B$O@.8y$7$F$$$k$h$&$J$N(B
$B$G$9$,!"$=$N8e!"(Btrace $B$9$k(Bprocess $B$O$=$N$^$^<B9T$5$l$F=*N;$7$F$7$^$$!"(B
ltrace $B$O=*N;$7$?$h$H$7$+8@$C$F$/$l$^$;$s!#(B

$B$d$C$?$3$H$O!"(Bltrace-0.3.10 $B$r;}$C$F$-$F!"(Bsysdeps/linux-gnu $B0J2<$r(B
sysdeps/freebsd4.0 $B$H$$$&%G%#%l%/%H%j$r:n$C$F%3%T!<$7!"$*$*$h$=<!$N$h(B
$B$&$JJQ99$r9T$J$$$^$7$?!#(B

* ptrace() $B$N0z?t$r(B /usr/include/sys/ptrace.h $B$r8+$FBP1~$9$k$H;W$o$l$k(B
  $B$b$N$KJQ99(B
  Linux2.2			FreeBSD4

  PTRACE_TRACEME         0	PT_TRACE_ME     0
  PTRACE_PEEKTEXT        1	PT_READ_I       1
  PTRACE_PEEKDATA        2	PT_READ_D       2
  PTRACE_PEEKUSR         3	PT_READ_U       3
  PTRACE_POKETEXT        4	PT_WRITE_I      4
  PTRACE_POKEDATA        5	PT_WRITE_D      5
  PTRACE_POKEUSR         6	PT_WRITE_U      6
  PTRACE_CONT            7	PT_CONTINUE     7
  PTRACE_KILL            8	PT_KILL         8
  PTRACE_SINGLESTEP      9	PT_STEP         9

  PTRACE_ATTACH       0x10	PT_ATTACH       10
  PTRACE_DETACH       0x11	PT_DETACH       11

  PTRACE_SYSCALL        24	$BBP1~$J$7(B(?)

* __NR_$B$J$s$?$i(B $BDj?t$rBP1~$9$k$H;W$o$l$k(B SYS_$B$J$s$?$i(B $B$KJQ99(B
  __NR_clone $B$OBP1~$9$k$H;W$o$l$k$b$N$,$J$$$N$G$=$N$^$^!#(B

* register? 
  *sysnum = ptrace(PTRACE_PEEKUSER, proc->pid, 4*ORIG_EAX, 0);

$B$H$J$C$F$$$kItJ,$OC1$KBP1~$7$=$&$J$b$N$KJQ99$9$k$J$i(B

  *sysnum = ptrace(PT_READ_U, proc->pid, 4*tEAX, 0);

$B$J$s$G$9$,!"(B/usr/include/machine/reg.h $B$K(B

/*
 * Indices for registers in `struct trapframe' and `struct regs'.
 *
 * This interface is deprecated.  In the kernel, it is only used in FPU
 * emulators to convert from register numbers encoded in instructions to
 * register values.  Everything else just accesses the relevant struct
 * members.  In userland, debuggers tend to abuse this interface since
 * they don't understand that `struct regs' is a struct.  I hope they have
 * stopped accessing the registers in the trap frame via PT_{READ,WRITE}_U
 * and we can stop supporting the user area soon.
 */

$B$J$s$F$3$H$,=q$$$F$"$k$N$G!"(B
  st=ptrace(PT_GETREGS, proc->pid, &ltrace_reg, 0);
    if (st >= 0) {
      *sysnum = ltrace_reg.r_eax;
$B$H$$$&=q$-J}$HN>J}$d$C$F$_$^$7$?!#(B

* $B$=$N$^$^$O%3%T!<$G$-$J$+$C$?$H$3$m!#(B
 sysdeps/linux-gnu/trace.c $B$K(B

void continue_after_signal(pid_t pid, int signum)
{
	/* We should always trace syscalls to be able to control fork(), clone(), execve()... */
	ptrace(PTRACE_SYSCALL, pid, 1, signum);

$B$H$$$&ItJ,$,$"$k$N$G$9$,!"(BPTRACE_SYSCALL $B$KBP1~$9$kDj?t$,$o$+$i$J$+$C(B
$B$?$N$G!"$3$3$O$=$N>e$G(B #if 0 $B$G%3%a%s%H%"%&%H$5$l$F$$$?ItJ,$r??;w$F(B

	ptrace(PT_CONTINUE, pid, 1, signum);

$B$H$7$F$$$^$9!#(B



$B$G!"JQ99$7$?FbMF$O!"(B
 <URI:http://www.allesnet.or.jp/~onlife/hiroo/> $B2<$K(B
   ltrace-FreeBSD.tar.gz
   ltrace-FreeBSD.patch
$B$H$$$&%U%!%$%k$K$7$F$*$$$F$"$j$^$9!#(B

$B;d$,:n6H$7$F$$$k$N$O(B 4.0-stable $B$G$9$,!"$=$A$i$G$N$d$j$+$?$O<!$NDL$j!#(B

o ltrace-0.3.10 $B$r;}$C$F$-$FE83+$7$?8e!"(Bsysdeps $B%G%#%l%/%H%j$G!"(B
  ltrace-FreeBSD.tar.gz $B$rE83+$9$k$H!"(BFreeBSD_4 $B$H$$$&%G%#%l%/%H%j$,$G$-(B
  $B$k$N$G!"$=$$$D$K(B freebsd4.0 $B$H$$$&(B symlink $B$rD%$k!#(B
  % uname -r $B$NCM$K$h$C$F!"$3$3$r(B freebsd3.5 $B$H$+(B freebsd5.0 $B$H$+$KJQ(B
  % $B$($J$$$H$$$1$J$$$G$7$g$&!#(B
  % $B$=$&$$$&>l9g$O!"(Bmksyscallent $B$H$+(B mksignalent $B$G(B i386/*ent.h $B$r(B
  % $B$r:n$C$F$d$kI,MW$,$"$k$+$b!#(B

o $BB>$K!"(Bltrace-0.3.10/elf.c $B$K(B patch $B$rEv$F$kI,MW$,$"$k(B(ltrace-FreeBSD.patch)$B!#(B

$B$=$N8e!"(Bltrace-0.3.10 $B$G!"(B./configure;make $B$H$9$l$P$H$j$"$($:$O:n$l$^$9!#(B
