使用Ptrace去拦截和仿真Linux系统调用
副标题[/!--empirenews.page--]
通过拦截功能,意味着跟踪器可以篡改系统调用参数,篡改系统调用的返回值,甚至阻塞某些系统调用。言外之意就是,一个跟踪器本身完全可以提供系统调用服务。这是件非常有趣的事,因为这意味着一个跟踪器可以仿真一个完整的外部操作系统,而这些都是在没有得到内核任何帮助的情况下由 Ptrace 实现的。 问题是,在同一时间一个进程只能被一个跟踪器附着,因此在那个进程的调试期间,不可能再使用诸如 GDB 这样的工具去仿真一个外部操作系统。另外的问题是,仿真系统调用的开销非常高。 在本文中,我们将专注于 x86-64 Linux 的 Ptrace,并将使用一些 Linux 专用的扩展。同时,在本文中,我们将忽略掉一些错误检查,但是完整的源代码仍然会包含这些错误检查。 本文中的可直接运行的示例代码在这里:https://github.com/skeeto/ptrace-examples strace在进入到最有趣的部分之前,我们先从回顾 strace 的基本实现来开始。它不是 DTrace,但 strace 仍然非常有用。 Ptrace 一直没有被标准化。它的接口在不同的操作系统上非常类似,尤其是在核心功能方面,但是在不同的系统之间仍然存在细微的差别。
另外两个字段, strace 接口实质上是前缀到另一个命令之前。
最小化的 strace 不需要任何选项,因此需要做的第一件事情是 —— 假设它至少有一个参数 —— 在
父进程使用
在允许子进程继续运行之前,我们告诉操作系统,被跟踪进程和它的父进程应该一同被终止。一个真实的 strace 实现可能会设置其它的选择,比如:
剩余部分就是一个简单的、无休止的循环了,每循环一次捕获一个系统调用。循环体总共有四步:
这个
当 接下来的一步是采集系统调用信息。这是各个系统架构不同的地方。在 x86-64 上,系统调用号是在
这里有一个警告。由于 内核的内部用途,系统调用号是保存在 (编辑:52站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在Windows 10中使用虚拟桌面
- windows-7 – SCCM是否适合中型企业?
- Win10记事本假死怎么办 Win10记事本假死处理方法
- 腾讯开源框架 Omi 更新,全面拥抱 Web Components
- 21个必知的机器学习开源工具,涵盖5大领域
- windows-server-2016 – 如何在Windows Server 2016上安装A
- windows-installer – Windows Installer总是说“正在安装另
- 树莓派使用入门:可以使用树莓派学习的3种流行编程语言
- windows-server-2012-r2 – 无法激活Windows Server 2012 r
- windows-server-2008 – 启动时运行bat文件