linux之ptrace

linux之ptrace经典博客:Linux内存替换系列(包括实验实验可行) 就是要注意下是64位还是32位的。。。。https://blog.csdn.net/Dearggae/article/details/47379245玩转ptrace:http://www.cnblogs.com/wangkangluo1/archive/2012/06/05/2535484.htmlptrac…

经典博客:
Linux内存替换系列(包括实验 实验可行)  就是要注意下是64位还是32位的。。。。
https://blog.csdn.net/Dearggae/article/details/47379245

玩转ptrace:
http://www.cnblogs.com/wangkangluo1/archive/2012/06/05/2535484.html

ptrace系统调用
ptrace系统调从名字上看是用于进程跟踪的,它提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的内核镜像(包括寄存器)的值。其基本原理是: 当使用了ptrace跟踪后,所有发送给被跟踪的子进程的信号(除了SIGKILL),都会被转发给父进程,而子进程则会被阻塞,这时子进程的状态就会被系统标注为TASK_TRACED。而父进程收到信号后,就可以对停止下来的子进程进行检查和修改,然后让子进程继续运行。
其原型为:
#include sys/ptrace.h
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
ptrace有四个参数:
1). enum __ptrace_request request:指示了ptrace要执行的命令。
2). pid_t pid: 指示ptrace要跟踪的进程。
3). void *addr: 指示要监控的内存地址。
4). void *data: 存放读取出的或者要写入的数据。
ptrace是如此的强大,以至于有很多大家所常用的工具都基于ptrace来实现,如strace和gdb。
来自 https://www.cnblogs.com/tangr206/articles/3094358.html

【描述】
提供父进程观察和控制另一个进程执行的机制,同时提供查询和修改另一进程的核心映像与寄存器的能力,主要用于执行断点调试和系统调用跟踪。
【功能】
Request参数决定了系统调用的功能:(第一个参数决定ptrace的行为也决定了接下来其它3个参数是怎样被使用的)
• 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进程不可以使用此函数

来自 https://blog.csdn.net/Dearggae/article/details/47144393

将代码插入到自由空间
在前面的例子中我们将代码直接插入到了正在执行的指令流中,然而,调试器可能会被这种行为弄糊涂,所以我们决定把指令插入到进程中的自由空间中去。通过察看/proc/pid/maps可以知道这个进程中自由空间的分布。

小结:
ptrace函数可能会让人们觉得很奇特,因为它居然可以检测和修改一个运行中的程序。这种技术主要是在调试器和系统调用跟踪程序中使用。它使程序员可以在用户级别做更多有意思的事情。已经有过很多在用户级别下扩展操作系统得尝试,比如UFO,一个用户级别的文件系统扩展,它使用ptrace来实现一些安全机制。

来自 http://www.cnblogs.com/wangkangluo1/archive/2012/06/05/2535484.html

断点的实现原理,就是在指定的位置插入断点指令,当被调试的程序运行到断点的时候,产生SIGTRAP信号。

来自 https://www.cnblogs.com/tangr206/articles/3094358.html

今天的文章linux之ptrace分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/7551.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注