没有合适的资源?快使用搜索试试~ 我知道了~
首页PTRACE函数代码分析
PTRACE函数代码分析
需积分: 42 17 下载量 81 浏览量
更新于2023-06-12
评论
收藏 498KB DOCX 举报
Ptrace 提供了一种父进程可以控制子进程运行,并可以检查和改变它的核心image。它主要用于实现断点调试。一个被跟踪的进程运行中,直到发生一个信号。则进程被中止,并且通知其父进程。在进程中止的状态下,进程的内存空间可以被读写。父进程还可以使子进程继续执行,并选择是否是否忽略引起中止的信号。
资源详情
资源评论
资源推荐
一 函数说明
1. 函数使用说明
名字
ptrace – 进程跟踪
形式
#include <sys/ptrace.h>
int ptrace(int request, int pid, int addr, int data);
描述
Ptrace 提供了一种父进程可以控制子进程运行,并可以检查和改变它的核心 image。它
主要用于实现断点调试。一个被跟踪的进程运行中,直到发生一个信号。则进程被中止,
并且通知其父进程。在进程中止的状态下,进程的内存空间可以被读写。父进程还可以使
子进程继续执行,并选择是否是否忽略引起中止的信号。
Request 参数决定了系统调用的功能:
PTRACE_TRACEME
本进程被其父进程所跟踪。其父进程应该希望跟踪子进程。
PTRACE_PEEKTEXT, PTRACE_PEEKDATA
从内存地址中读取一个字节,内存地址由 addr 给出。
PTRACE_PEEKUSR
从 USER 区域中读取一个字节,偏移量为 addr。
PTRACE_POKETEXT, PTRACE_POKEDATA
往内存地址中写入一个字节。内存地址由 addr 给出。
PTRACE_POKEUSR
往 USER 区域中写入一个字节。偏移量为 addr。
PTRACE_SYSCALL, PTRACE_CONT
重新运行。
PTRACE_KILL
杀掉子进程,使它退出。
PTRACE_SINGLESTEP
设置单步执行标志
PTRACE_ATTACH
跟踪指定 pid 进程。
PTRACE_DETACH
结束跟踪
Intel386 特有:
PTRACE_GETREGS
读取寄存器
PTRACE_SETREGS
设置寄存器
PTRACE_GETFPREGS
读取浮点寄存器
PTRACE_SETFPREGS
设置浮点寄存器
init 进程不可以使用此函数
返回值
成功返回 0。错误返回-1。errno 被设置。
错误
EPERM
特殊进程不可以被跟踪或进程已经被跟踪。
ESRCH
指定的进程不存在
EIO
请求非法
2. 功能详细描述
A. PTRACE_TRACEME
形式:ptrace(PTRACE_TRACEME,0 ,0 ,0)
描述:本进程被其父进程所跟踪。其父进程应该希望跟踪子进程。
B. PTRACE_PEEKTEXT, PTRACE_PEEKDATA
形式:ptrace(PTRACE_PEEKTEXT, pid, addr, data)
ptrace(PTRACE_PEEKDATA, pid, addr, data)
描述:从内存地址中读取一个字节,pid 表示被跟踪的子进程,内存地址由 addr 给出,data
为用户变量地址用于返回读到的数据。在 Linux(i386)中用户代码段与用户数据段重合所
以读取代码段和数据段数据处理是一样的。
C. PTRACE_POKETEXT, PTRACE_POKEDATA
形式:ptrace(PTRACE_POKETEXT, pid, addr, data)
ptrace(PTRACE_POKEDATA, pid, addr, data)
描述:往内存地址中写入一个字节。pid 表示被跟踪的子进程,内存地址由 addr 给出,data
为所要写入的数据。
D. PTRACE_PEEKUSR
形式:ptrace(PTRACE_PEEKUSR, pid, addr, data)
描述:从 USER 区域中读取一个字节,pid 表示被跟踪的子进程,USER 区域地址由 addr 给
出,data 为用户变量地址用于返回读到的数据。USER 结构为 core 文件的前面一部分,它
描述了进程中止时的一些状态,如:寄存器值,代码、数据段大小,代码、数据段开始地
址等。在 Linux (i386 ) 中 通 过 PTRACE_PEEKUSER 和 PTRACE_POKEUSR 可以访问
USER 结构的数据有寄存器和调试寄存器。
E. PTRACE_POKEUSR
形式:ptrace(PTRACE_POKEUSR, pid, addr, data)
描述:往 USER 区域中写入一个字节,pid 表示被跟踪的子进程,USER 区域地址由 addr 给
出,data 为需写入的数据。
F. PTRACE_CONT
形式:ptrace(PTRACE_CONT, pid, 0, signal)
描述:继续执行。pid 表示被跟踪的子进程,signal 为 0 则忽略引起调试进程中止的信号,
若不为 0 则继续处理信号 signal。
G. PTRACE_SYSCALL
形式:ptrace(PTRACE_SYS, pid, 0, signal)
描述:继续执行。pid 表示被跟踪的子进程,signal 为 0 则忽略引起调试进程中止的信号,
若不为 0 则继续处理信号 signal。与 PTRACE_CONT 不同的是进行系统调用跟踪。在被跟
踪进程继续运行直到调用系统调用开始或结束时,被跟踪进程被中止,并通知父进程。
H. PTRACE_KILL
形式:ptrace(PTRACE_KILL,pid)
描述:杀掉子进程,使它退出。pid 表示被跟踪的子进程。
I. PTRACE_SINGLESTEP
形式:ptrace(PTRACE_KILL, pid, 0, signle)
描述:设置单步执行标志,单步执行一条指令。pid 表示被跟踪的子进程。signal 为 0 则忽
略引起调试进程中止的信号,若不为 0 则继续处理信号 signal。当被跟踪进程单步执行完一
个指令后,被跟踪进程被中止,并通知父进程。
J. PTRACE_ATTACH
形式:ptrace(PTRACE_ATTACH,pid)
描述:跟踪指定 pid 进程。pid 表示被跟踪进程。被跟踪进程将成为当前进程的子进程,并
进入中止状态。
K. PTRACE_DETACH
形式:ptrace(PTRACE_DETACH,pid)
描述:结束跟踪。 pid 表示被跟踪的子进程。结束跟踪后被跟踪进程将继续执行。
L. PTRACE_GETREGS
形式:ptrace(PTRACE_GETREGS, pid, 0, data)
描述:读取寄存器值,pid 表示被跟踪的子进程,data 为用户变量地址用于返回读到的数据。
此功能将读取所有 17 个基本寄存器的值。
M. PTRACE_SETREGS
形式:ptrace(PTRACE_SETREGS, pid, 0, data)
描述:设置寄存器值,pid 表示被跟踪的子进程,data 为用户数据地址。此功能将设置所有
17 个基本寄存器的值。
N. PTRACE_GETFPREGS
形式:ptrace(PTRACE_GETFPREGS, pid, 0, data)
描述:读取浮点寄存器值,pid 表示被跟踪的子进程,data 为用户变量地址用于返回读到的
数据。此功能将读取所有浮点协处理器 387 的所有寄存器的值。
O. PTRACE_SETFPREGS
形式:ptrace(PTRACE_SETREGS, pid, 0, data)
描述:设置浮点寄存器值,pid 表示被跟踪的子进程,data 为用户数据地址。此功能将设置
所有浮点协处理器 387 的所有寄存器的值。
二 80386 的调试设施
80386 提供的调试设施包括:
一字节的陷阱指令
单步指令
断点检测
任务切换时的自陷
剩余50页未读,继续阅读
jason444445
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0