加入收藏 | 设为首页 | 会员中心 | 我要投稿 92站长网 (https://www.92zhanzhang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

使用Ptrace去拦截和仿真Linux系统调用

发布时间:2018-09-05 01:33:59 所属栏目:Windows 来源:Chris Wellons
导读:ptrace(2) ( 进程跟踪 process trace )系统调用通常都与调试有关。它是类 Unix 系统上通过原生调试器监测被调试进程的主要机制。它也是实现 strace( 系统调用跟踪 system call trace )的常见方法。使用 Ptrace,跟踪器可以暂停被跟踪进程,检查和设置

使用我在前面所描述的这些内容你就可以管理这一切。跟踪器可以使用一个假冒的东西去代替系统调用号,允许它失败,以及为系统调用本身提供服务。但那样做的效率很低。其实质上是对每个系统调用做了三个上下文切换:一个是在入口上停止,一个是让系统调用总是以失败告终,还有一个是在系统调用退出时停止。

从 2005 年以后,对于这个技术,PTrace 的 Linux 版本有更高效的操作:PTRACE_SYSEMU。PTrace 仅在每个系统调用发出时停止一次,在允许被跟踪进程继续运行之前,由跟踪器为系统调用提供服务。

  1. for (;;) {
  2. ptrace(PTRACE_SYSEMU, pid, 0, 0);
  3. waitpid(pid, 0, 0);
  4.  
  5. struct user_regs_struct regs;
  6. ptrace(PTRACE_GETREGS, pid, 0, &regs);
  7.  
  8. switch (regs.orig_rax) {
  9. case OS_read:
  10. /* ... */
  11.  
  12. case OS_write:
  13. /* ... */
  14.  
  15. case OS_open:
  16. /* ... */
  17.  
  18. case OS_exit:
  19. /* ... */
  20.  
  21. /* ... and so on ... */
  22. }
  23. }

(编辑:92站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!