zoukankan      html  css  js  c++  java
  • linux 进程学习笔记-进程跟踪

    进程跟踪  
    
    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
  • 相关阅读:
    PHP 获取当前url的函数及参数
    PHP 和 AJAX responseXML 实例
    PHP 和 AJAX 投票
    AJAX技术在PHP开发中的简单应用
    摄影教程
    结合 Ajax 进行 PHP 开发
    CSS 格式验证器
    swfobject.js,这个JS究竟有什么作用呢
    PHP中Date获取时间不正确怎么办
    用来给不愿意用iframe的同志的页面引用的解决办法
  • 原文地址:https://www.cnblogs.com/zendu/p/4988383.html
Copyright © 2011-2022 走看看