📄 ptrace.c
字号:
/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.This file is part of the GNU C Library.The GNU C Library is free software; you can redistribute it and/ormodify it under the terms of the GNU Library General Public License aspublished by the Free Software Foundation; either version 2 of theLicense, or (at your option) any later version.The GNU C Library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNULibrary General Public License for more details.You should have received a copy of the GNU Library General PublicLicense along with the GNU C Library; see the file COPYING.LIB. Ifnot, write to the Free Software Foundation, Inc., 675 Mass Ave,Cambridge, MA 02139, USA. */#include <ansidecl.h>#include <errno.h>#include <sys/ptrace.h>#include <sys/types.h>#include <stdarg.h>/* Perform process tracing functions. REQUEST is one of the values in <sys/ptrace.h>, and determines the action to be taken. For all requests except PTRACE_TRACEME, PID specifies the process to be traced. PID and the other arguments described above for the various requests should appear (those that are used for the particular request) as: pid_t PID, void *ADDR, int DATA, void *ADDR2 after PID. */intDEFUN(ptrace, (request), enum __ptrace_request request DOTS){ pid_t pid; PTR addr; PTR addr2; int data; va_list ap; switch (request) { case PTRACE_TRACEME: case PTRACE_CONT: case PTRACE_KILL: case PTRACE_SINGLESTEP: case PTRACE_ATTACH: case PTRACE_DETACH: break; case PTRACE_PEEKTEXT: case PTRACE_PEEKDATA: case PTRACE_PEEKUSER: case PTRACE_GETREGS: case PTRACE_SETREGS:#ifdef PTRACE_GETFPREGS case PTRACE_GETFPGEGS:#endif case PTRACE_SETFPREGS: case PTRACE_GETFPAREGS: case PTRACE_SETFPAREGS: va_start(ap, request); pid = va_arg(ap, pid_t); addr = va_arg(ap, PTR); va_end(ap); break; case PTRACE_POKETEXT: case PTRACE_POKEDATA: case PTRACE_POKEUSER: va_start(ap, request); pid = va_arg(ap, pid_t); addr = va_arg(ap, PTR); data = va_arg(ap, int); va_end(ap); break; case PTRACE_READDATA: case PTRACE_WRITEDATA: case PTRACE_READTEXT: case PTRACE_WRITETEXT: va_start(ap, request); pid = va_arg(ap, pid_t); addr = va_arg(ap, PTR); data = va_arg(ap, int); addr2 = va_arg(ap, PTR); va_end(ap); break; default: errno = EINVAL; return -1; } errno = ENOSYS; return -1;}#ifdef HAVE_GNU_LD#include <gnu-stabs.h>stub_warning(ptrace);#endif /* GNU stabs. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -