您的位置:首页 > 运维架构 > Linux

[Ptrace]Linux内存替换(一)函数介绍

2015-07-30 09:31 846 查看
最近对Linux下内存替换突发兴趣,遂决定实践试试。Linux下的内存替换不像Windows可以利用CreateRemoteThread那么容易,不过Linux也提供了ptrace()这么强大的API,所以为了实现内存替换,首先我要初步了解ptrace()。

【形式】

#include <sys/ptrace.h>
int ptrace(int request, int pid, int addr, int data);


【描述】

提供父进程观察和控制另一个进程执行的机制,同时提供查询和修改另一进程的核心映像与寄存器的能力,主要用于执行断点调试和系统调用跟踪。

【功能】

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

请求非法

【参考】

http://blog.sina.com.cn/s/blog_4ac74e9a0100n7w1.html

http://blog.sina.com.cn/s/blog_601f224a01013alj.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: