ptrace学习笔记(1)

参考博客http://blog.csdn.net/sealyao/article/details/6710772
本人操作系统:ubuntu-14.04
在执行系统调用之前,内核会先检查当前进程是否处于被“跟踪”(traced)的状态。如果是的话,内核暂停当前进程并将控制权交给跟踪进程,使跟踪进程得以察看或者修改被跟踪进程的寄存器。
文中第一个例子,linux/user.h头文件找不到,替换成sys/reg.h,另外还有一个小白问题,代码中调用了printf但没有包含头文件stdio.h
    

 1 #include <sys/ptrace.h>  
 2 #include <sys/types.h>  
 3 #include <sys/wait.h>  
 4 #include <unistd.h>  
 5 #include <sys/reg.h> //modified
 6 #include <stdio.h>  //modified
 7 //#include <linux/user.h>   /* For constants    ORIG_EAX etc */  
 8 int main()  
 9 {  
10     pid_t child;  
11     long orig_eax;  
12     child = fork();  
13     if(child == 0) {  
14         ptrace(PTRACE_TRACEME, 0, NULL, NULL);  
15         execl("/bin/ls", "ls", NULL);  
16     }  
17     else {  
18         wait(NULL);  
19         orig_eax = ptrace(PTRACE_PEEKUSER,   
20                           child, 4 * ORIG_EAX,   
21                           NULL);  
22         printf("The child made a system call %ld ", orig_eax);  
23         ptrace(PTRACE_CONT, child, NULL, NULL);  
24     }  
25     return 0;  
26 }  

 

对于fork()函数,如果运行在父进程中,则返回PID为子进程的进程号,如果在子进程中,则返回的PID为0.
上述代码中,若子进程运行(child==0),调用ptrace开始跟踪子进程(traceme= =),然后执行ls指令,之后的原理文中写的很详细。
#include <sys/ptrace.h>
long ptrace(enum __ptrace_request request,pid_t pid,void *addr,void *data);
第一个参数决定了ptrace的行为与其它参数的使用方法。

PTRACE_PEEKUSER
第二个例子主要展示的是参数PTRACE_PEEKUSER的用法。
形式:ptrace(PTRACE_PEEKUSR, pid, addr, data)
描述:从USER区域中读取一个字节,pid表示被跟踪的子进程,USER区域地址由addr给出,data为用户变量地址用于返回读到的数据。USER结构为core文件的前面一部分,它描述了进程中止时的一些状态,如:寄存器值,代码、数据段大小,代码、数据段开始地址等。在Linux(i386)中通过PTRACE_PEEKUSER和PTRACE_POKEUSR可以访问USER结构的数据有寄存器和调试寄存器。

PTRACE_GETREGS
第三个例子与前面的代码是比较相似的,不同的是它使用了PTRACE_GETREGS。使用PRACE_GETREGS作为ptrace的第一个参数来调用,可以只需一次函数调用就取得所有的相关寄存器值。其中的user_regs_struct结构是在<linux/user.h>中定义的(我的系统定义在<sys/user.h>中)。
形式:ptrace(PTRACE_GETREGS, pid, 0, data)
描述:读取寄存器值,pid表示被跟踪的子进程,data为用户变量地址用于返回读到的数据。此功能将读取所有17个基本寄存器的值。

未完待续

 

转载于:https://www.cnblogs.com/milly-IT-blog/p/5215890.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于微信小程序的家政服务预约系统采用PHP语言和微信小程序技术,数据库采用Mysql,运行软件为微信开发者工具。本系统实现了管理员和客户、员工三个角色的功能。管理员的功能为客户管理、员工管理、家政服务管理、服务预约管理、员工风采管理、客户需求管理、接单管理等。客户的功能为查看家政服务进行预约和发布自己的需求以及管理预约信息和接单信息等。员工可以查看预约信息和进行接单。本系统实现了网上预约家政服务的流程化管理,可以帮助工作人员的管理工作和帮助客户查询家政服务的相关信息,改变了客户找家政服务的方式,提高了预约家政服务的效率。 本系统是针对网上预约家政服务开发的工作管理系统,包括到所有的工作内容。可以使网上预约家政服务的工作合理化和流程化。本系统包括手机端设计和电脑端设计,有界面和数据库。本系统的使用角色分为管理员和客户、员工三个身份。管理员可以管理系统里的所有信息。员工可以发布服务信息和查询客户的需求进行接单。客户可以发布需求和预约家政服务以及管理预约信息、接单信息。 本功能可以实现家政服务信息的查询和删除,管理员添加家政服务信息功能填写正确的信息就可以实现家政服务信息的添加,点击家政服务信息管理功能可以看到基于微信小程序的家政服务预约系统里所有家政服务的信息,在添加家政服务信息的界面里需要填写标题信息,当信息填写不正确就会造成家政服务信息添加失败。员工风采信息可以使客户更好的了解员工。员工风采信息管理的流程为,管理员点击员工风采信息管理功能,查看员工风采信息,点击员工风采信息添加功能,输入员工风采信息然后点击提交按钮就可以完成员工风采信息的添加。客户需求信息关系着客户的家政服务预约,管理员可以查询和修改客户需求信息,还可以查看客户需求的添加时间。接单信息属于本系统里的核心数据,管理员可以对接单的信息进行查询。本功能设计的目的可以使家政服务进行及时的安排。管理员可以查询员工信息,可以进行修改删除。 客户可以查看自己的预约和修改自己的资料并发布需求以及管理接单信息等。 在首页里可以看到管理员添加和管理的信息,客户可以在首页里进行家政服务的预约和公司介绍信息的了解。 员工可以查询客户需求进行接单以及管理家政服务信息和留言信息、收藏信息等。
shim ptrace是一个用于操作进程的系统调用接口。它允许一个进程跟踪、控制和检查另一个进程的执行情况。通过shim ptrace,一个进程可以检查另一个进程的寄存器、内存和系统调用,并有能力修改它们的执行过程。 shim ptrace通常用于调试、监视和诊断进程。调试器可以使用shim ptrace来实现断点、单步执行和修改变量等调试功能。另外,shim ptrace还可以用于分析和检查进程的运行,例如查找进程中的内存泄漏、跟踪系统调用和信号处理。 在使用shim ptrace时,一个进程可以作为被跟踪进程,另一个进程则作为跟踪进程。跟踪进程使用ptrace系统调用来发送指令,而被跟踪进程则接收并执行指令。通过这种方式,跟踪进程可以获取被跟踪进程的状态信息,并对其进行操作。 对于被跟踪进程,它会在指令执行之前接收到跟踪进程发送的指令,并根据指令的要求进行操作。例如,跟踪进程可以用ptrace(PTRACE_PEEKDATA, pid, addr, data)来读取被跟踪进程中地址为addr的内存数据,并将结果保存在data中。类似地,跟踪进程也可以使用ptrace(PTRACE_POKEDATA, pid, addr, data)来修改被跟踪进程的内存值。 总之,shim ptrace是一个强大的工具,允许进程间相互跟踪、控制和修改执行过程。它在调试、监视和诊断进程方面扮演着重要角色,为开发人员提供了有效的方法来分析和改进程序的执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值