DataHook:一种高效且轻量级的系统调用钩子技术,无需修改指令
《Proceedings of the ACM on Software Engineering》:DataHook: An Efficient and Lightweight System Call Hooking Technique without Instruction Modification
【字体:
大
中
小
】
时间:2025年11月07日
来源:Proceedings of the ACM on Software Engineering
编辑推荐:
系统调用挂钩技术DataHook针对32位程序,通过修改间接调用指令的数据依赖实现零字节重写,有效规避多线程冲突并支持高效用户态子系统。实验表明其开销降低5.4-1429倍,在服务器场景性能提升4.3倍,Redis应用性能损失仅4%(优于传统方法8%-94.7%)。
摘要
系统调用是用户空间程序与操作系统(OS)内核之间交互的主要接口。通过拦截系统调用,可以分析和修改用户空间程序的行为。本文提出了一种名为DataHook的高效且轻量级的系统调用拦截技术,适用于32位程序。与现有的系统调用拦截技术相比,DataHook仅通过修改少量数据元素而无需更改任何程序指令,从而实现了极低的拦截开销。这一独特特性不仅避免了与二进制重写相关的多线程冲突,还支持程序使用更高效的用户空间操作系统子系统。然而,现有的系统调用拦截技术难以同时实现这些目标。虽然像syscall user dispatch(SUD)和ptrace这样的技术不需要重写进程指令,但它们会引入较大的拦截开销。另一方面,低开销的技术通常涉及多个字节或指令的二进制重写,这也会带来一系列挑战。DataHook巧妙地利用了32位程序在系统调用时的特定行为来解决这些问题。简而言之,与64位程序不同,32位程序在发起系统调用时会使用间接调用指令跳转到执行系统调用的函数。本文通过操作间接调用过程中涉及的数据依赖关系来实现系统调用拦截。这一特性存在于基于glibc的Linux系统中的32位程序中,无论是在x86还是x86-64架构上运行。因此,DataHook可以在这些系统上部署。实验结果表明,与现有技术相比,DataHook可以将拦截开销降低5.4到1,429.0倍。当将DataHook应用于服务器程序以使其使用用户空间网络堆栈时,服务器性能提高了约4.3倍。此外,当应用于Redis时,DataHook仅导致4.0%的性能损失,而其他技术则会导致8.0%到94.7%的性能损失。
生物通微信公众号
生物通新浪微博
今日动态 |
人才市场 |
新技术专栏 |
中国科学人 |
云展台 |
BioHot |
云讲堂直播 |
会展中心 |
特价专栏 |
技术快讯 |
免费试用
版权所有 生物通
Copyright© eBiotrade.com, All Rights Reserved
联系信箱:
粤ICP备09063491号