在用户空间中进行系统调用截取的方法和系统技术方案

技术编号:2918233 阅读:158 留言:0更新日期:2012-04-11 18:40
一种从用户空间的过程进行的截取系统调用以及执行与截取的系统调用有关的处理的方法和系统。所述方法包括第一步骤,用于在执行过程中启动信号处理程序,在收到特定信号后执行与执行过程中系统调用的截取有关的处理。执行过程以新的请求执行ptrace系统调用-自ptrace,它在执行过程的任务描述符中设置现有系统跟踪ptrace请求对应系统跟踪旗标,并且设置新的旗标-pt_self旗标。在执行过程中进行系统调用时,执行新的系统调用跟踪,测试pt_self旗标是否置位。如果pt_self旗标已经置位,就将特定信号发送到执行过程本身并且在用户空间中执行已经启动的处理程序。

【技术实现步骤摘要】
在用户空间中进行系统调用截取的方法和系统
一般来说,本专利技术涉及截取系统调用的方法,更确切地说,这种 方法允许从用户空间截取系统调用。
技术介绍
应用程序级的若干虚拟化系统将应用程序与底层物理硬件隔离,其目的是为了保护(容错)、(利用在Linux上运行的IBM的 MetaCluster, MetaCluster是IBM公司在某些国家中的商标)通过检 查点和重新开始的流动性(应用程序再定位)、确定性重放或者仅仅 是资源隔离,如Linux (Linux是Linux Torvalds在美国、其他国家 或兼而有之的注册商标)的Vserver (Vserver是Linux Torvalds在某 些国家中的商标)、Virtuozzo (Virtuozzo是Swsoft在某些国家中的 商标)的OpenVZ,它们都需要截取和改变现有系统调用的原始语义。 做到这一点的一种方法是在内核中改变系统调用例程,以引进语 义的系统调用截取和修改。在操作系统内部执行必需的改变难以实行, 危及整个系统的稳定性和安全性,并且用户和维护者通常不太愿意接 受,因为它增加了内核的复杂性并可能危及系统的完整性和支持它的 能力。存在着某些方法将代码插入到程序中以分析其行为,例如通过收 集分析数据。这种修改程序使其分析自己的技术被称为"探测方法"。 探测方法可以用于检测系统调用,有可能以这种方式从用户空间修改 它们。不过,现有探测方法虽然对于调试足以胜任,但是不能满足高 性能要求,如容错系统的要求。检测可执行代码的"ptrace"方法-如Linux strace工具使用的——需要外部控制器过程,当信号通知它时,它在每次系统调用发生 时都停止、内观,然后再重新开始。尽管这种方法是一般的方法,但 是形成的运行开销巨大。LD—PRELOAD方法——也是检测可执行代码——执行动态链 接符号插入,以截取和替换以动态符号形式存在的系统调用。这种方 法仅限于动态可执行文件,不适用于系统调用内联在库中的情况(因 为存在着关联符号)。现在内联系统调用在最近的Linux标准库中越 来越常见,使得这种方法遭到反对。机器码重写法是另一种可执行码的探测方法可执行机器码被静 态地或动态地重写,并且当遇到系统调用时,能够插入某种附加代码 以提供附加值。这种方法不支持自修改的可执行码,并且运行开销也 可能非常可观。实例是数字设备^^司工作站上过去可用的ATOM产 品。ATOM在编译时向要被分析的程序内插入代码。因此需要一种新方法,在程序执行期间截取所有类型的系统调 用,并且从用户空间修改它们的行为,同时避免(对容错系统无法接 受的)运行开销,因为内核码以特权模式执行,并且不能由程序修改。
技术实现思路
本专利技术的目的是提供截取系统调用并从用户空间修改它们行为 的探测方法,它适用于任何类型的可执行码,同时保持良好的性能水 平。根据权利要求1,达到这个目的是利用了在用户空间中执行过程 中截取系统调用并且在用户空间中执行与截取的系统调用有关的若干 操作的方法,所述方法在计算机上执行,其中,操作系统内核支持包 括系统跟踪的ptrace系统调用,所述方法进一步包括 一在执行过程中启动信号处理程序,所述信号处理程序包含执行与将 要截取的系统调用有关的操作的代码;一在执行过程中,在执行将要截取的系统调用之前,进行在内核中设置系统跟踪旗标和自跟踪旗标的自ptrace请求;一在执行系统调用之后,内核验证已设置系统跟踪旗标和自跟踪旗 标;—内核保存系统调用信息并发送与信号处理程序对应的、传递系统调 用信息的信号;一执行过程收到信号后,开始信号处理程序的执行;一在信号处理程序执行结束时,在执行过程中,在所截取系统调用后跟随的下一条指令重新开始执行,同时提供系统调用返回信息。根据权利要求2,达到这个目的也是利用了权利要求1的方法, 进一步包括在内核发送信号之前 一内核使系统跟踪旗标和自跟踪旗标复位。根据权利要求3,达到这个目的也是利用了权利要求1或2的方 法,其中执行自ptrace请求的步骤包括一在执行过程的任务描述符中保存系统跟踪旗标和自跟踪旗标。根据权利要求4,达到这个目的也是利用了权利要求1或2的方 法,其中执行自ptrace请求的步骤进一步包括一在执行过程的任务描述符中保存自跟踪旗标,在执行过程的线程描 述符中保存系统跟踪旗标。根据权利要求5,达到这个目的也是利用了权利要求1至4中任 何一条的方法,其中,内核发送传递系统调用信息的信号的步骤进一 步包括—内核发送传递系统调用标识符和参数的信号。根据权利要求6,达到这个目的也是利用了权利要求1至5中任 何一条的方法,其中,内核发送与信号处理程序对应的信号的步骤进 一步包括—所述信号为操作系统已经使用的一个信号,并且在执行先前步骤时 从其初始用途进行了修改;一如果没有执行所述方法的先前步骤,所述信号不由内核修改地使 用.根据权利要求7,达到这个目的也是利用了权利要求1至6中任 何一条的方法,其中,启动信号处理程序的步骤进一步包括一所述信号处理程序包含进行预处理或系统调用仿真或后处理的代 码。根据权利要求8,达到这个目的也是利用了权利要求1至6中任 何一条的方法,其中,启动信号处理程序的步骤进一步包括 一所述信号处理程序包含虚拟或调试所述执行过程的代码。根据权利要求9,达到这个目的也是利用了一种系统,包括适于 实行才艮据权利要求1至8中任何一条的装置。利用本专利技术,在执行的程序进行系统调用时,内核的系统调用通 知机构产生信号。如果在执行的程序中已经执行了本专利技术特定的新 PTRACE系统调用,这个信号就发送到执行的程序本身,它可以提供 用户空间信号处理程序以执行新的代码。应当指出,即使本专利技术对Linux系统参考手册中描述的现有 PTRACE系统调用实施了新的请求,但是除了 Linux以外,所有UNIX 系统都已经提供了 'ptrace式,特点并具有现有的系统调用通知机构 (由strace或truss工具的存在所表明)。这暗示了在本专利技术之上开 发的服务的可移植性。 一旦在新的UNIX系统中实施了本专利技术,先前 UNIX系统上的用户空间中已经开发的服务马上变为对新系统可用。具有调试器——它取得过程的控制并强制逐步的执行——的所 有操作系统都以新的PTRACE请求实施例提供ptrace系统调用或类 似手段——可以按建议进行修改。根据本专利技术的解决方案,如果 PTRACE系统调用不存在, 一个其他实施例应当在内核中创建特定的 服务,它将仅仅执行系统调用通知的激活。本专利技术的解决方案适用于任何种类的可执行码(静态的或动态 的),支持内联系统调用以及由自修改的代码动态产生的系统调用。通知的运行开销极低。它对应于信号中断成本的一半。因为在检 测中不包括附加任务,所以在任务之间没有附加的上下文切换,也没 有附加的过程间通讯。这些特征确保了良好的性能水平.本解决方案的其他优点可以列举如下 —为了支持系统调用的整个集合的截取和虚拟,除了唯一的简单小补丁以外,内核中不需要进一步的修改。一这种机制也允许广义的概念,将本专利技术的方法应用于不存在的或不 支持的系统调用,只要它们能够被截取和仿真。一安全性在执行过程的情况下,在这种截取机制之上实施的全部服务都驻留在用户空间中,完全如同本文档来自技高网
...

【技术保护点】
一种在用户空间中执行过程中截取系统调用并且在用户空间中执行与截取的系统调用有关处理的方法,所述方法在计算机上执行,其中,操作系统内核支持包括系统跟踪的ptrace系统调用,所述方法进一步包括:-在执行过程中启动信号处理程序,所述信号 处理程序包含执行与将要截取的系统调用有关的操作的代码;-在执行过程中,在执行将要截取的系统调用之前,进行在内核中设置系统跟踪旗标和自跟踪旗标的自ptrace请求;-在执行系统调用之后,内核验证已设置系统跟踪旗标和自跟踪旗标; -内核保存系统调用信息并发送与信号处理程序对应的、传递系统调用信息的信号;-执行过程收到信号后,开始信号处理程序的执行;-在信号处理程序执行结束时,在执行过程中,在所截取系统调用后跟随的下一条指令重新开始执行,同时提 供系统调用返回信息。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:马克沃特斯
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1