进程跟踪  

long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
Linux用ptrace来进行进程跟踪,就跟我们平时用GDB debug一样,它允许一个进程去跟踪和控制另外一个进程。当被跟踪进程有信号发生时,被跟踪进程会被暂停下来,
其内存空间变得可读写,跟踪它的进程可以选择是否忽略该信号和让程序继续进行。被跟踪进程无论是进行系统调用还是从系统调用返回时,跟踪它的进程都可以来处理该
系统调用,比如检查或修改调用参数,修改寄存器和向代码段插入新的代码等。 requset参数:用于表示该次ptrace的类型,有很多种:
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
设置浮点寄存器
pid参数:表示被跟踪的进程的pid
addr参数和data参数:因requset参数的不同而有不同的作用,比如request为PTRACE_POKETEXT,其表示向内存写入一个字节的数据,那么addr表示要写入的内存地址,
data则表示要写入的那一个字节。 ptrace是一个很复杂的topic,更多的可以参考这篇文章:Playing with ptrace: Part I, Part II

最新文章

  1. Java中随机数的产生方式与原理
  2. 阿里云 centos 安装apache和php
  3. 了解C++默认编写并调用哪些函数
  4. 转:Hide data inside pointers(在指针中隐藏数据)
  5. Install mcrypt for php on Mac OSX 10.10 Yosemite for a Development Server
  6. Linux搭建SVN 服务器(转)
  7. (原)C++中测试代码执行时间
  8. 来自中油瑞飞的SQL笔试题20131202
  9. Android 网络通信框架Volley基本介绍
  10. UMeng崩溃日志如何进行symbiolicate
  11. Android - Fragment (一)定义
  12. 【JAVA零基础入门系列】Day14 Java对象的克隆
  13. linux系统下安装jdk、tomcat、mysql、redis
  14. MacTalk·人生元编程 - 读书笔记
  15. css奇淫巧计
  16. (原创)Rocketmq分布式消息队列的部署与监控
  17. python django简单的登陆实现
  18. 【python021-函数lambda表达式】
  19. HDU 3078 LCA转RMQ
  20. .NET Core下开源任务调度框架Hangfire的Api任务拓展(支持秒级任务)

热门文章

  1. websocket使用ssl 证书,开启加密服务
  2. JAVA启动参数整理
  3. uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结
  4. 37:密码截取(回文串manacher算法)
  5. Java编码辅助工具:Mapstruct—— Java对象转换框架
  6. emacs 简记
  7. 【Linux】OpenWRT的无线设置注意事项——从2.4G到5G,hwmode不简单
  8. HTML中Select的使用详解
  9. git系列1
  10. View数据呈现相关技术