(计算机应用技术专业论文)基于分布式系统的程序监控技术研究及其应用.pdf_第1页
(计算机应用技术专业论文)基于分布式系统的程序监控技术研究及其应用.pdf_第2页
(计算机应用技术专业论文)基于分布式系统的程序监控技术研究及其应用.pdf_第3页
(计算机应用技术专业论文)基于分布式系统的程序监控技术研究及其应用.pdf_第4页
(计算机应用技术专业论文)基于分布式系统的程序监控技术研究及其应用.pdf_第5页
已阅读5页,还剩47页未读 继续免费阅读

(计算机应用技术专业论文)基于分布式系统的程序监控技术研究及其应用.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浙江大学硕士学位论文 摘要 将程序监控技术应用于程序设计在线竞赛、编程上机考试、在线 判题系统,可以实现程序评测的完全自动化,大幅度的提高工作效率, 减轻教师的负担。此类判题系统的共同点就是需要在服务器上运行用 户提交的程序,因此存在着一定安全隐患;而且面对大量的用户提交, 对性能上也有很高要求。程序监控技术作为此类系统的核心,有着安 全性和高效性两方面的要求。本文讨论了在“n u x 操作系统下监控用 户进程的两种方法隆改系统中断向量表和使用d t r a c e 系统调用, 并对这两种方法进行了比较。为了解决判题系统的效率问题,本文提 出了使用分布式系统的方法。分布式系统有着效率高,可靠性强,易 于扩展的优点,非常适合于判题系统。最后基于以上的分布式的程序 监控技术,我们实现了新一代的浙江大学在线判题系统,并与以前的 判题系统做了对比。通过测试新系统在各个方面都超越了老系统。 关键词程序监控,系统调用屏蔽,分布式 浙江大学硕士学位论文 a b s t r a c t a j u d g es y s t e ma c c e p t su s e r sp r o g r a mv i an e t v l ,o r l 【,m 1 1 s i to nt h e s e r v e r ,a n dc h e c l 【sw h e m e rt h er e s u l t sa r ec o r r e c t r u n n i n gu s e r sp r o g r a m o nm es e r v e rm a yc a u s ep o t e n t i a ls e c i l r i t yi s s u e s ,s ot h e r em u s tb eaw a y t om o n i t o r 觚dc o n 仃o ll l s e r sp r o g r 锄a st h ec o r et e c h n o l o g yo ft h e o n l i i l ej u d g es y s t e l n ,p r o g r a mc o n t r o ln m s tb es e c l l r ea n de f i c i e n t t h i s a n i c l ed i s c u s s e sh o wt om o n i t o ra n d n t r o lap r o g r a mu n d e rl m u x o p e r a t i n gs v s t e m t h e r ea r et w ow a y st 0m o n i t o ra n d n t r o lu s e r s p r o b l e m o n ei st 0m o d i 钾s y s t e mi n t e m l p tv e c t o rt a b l e ,a n dt h eo t h e ro n e i st ou s ep t f a c cs y s t e mc a l l i no r d e rt 0s o l v et h ee 伍c i e n c yi s s u e ,t h i s a n i c l ei n t r o d u c e sas 0 1 u t i o nb a s e do nd i s t r i b u t e ds v s t e m d i s t r i b u t e d o i l l i n ej u d g es y s t e mi se f f i c i e n t ,f e l i a b l e ,a 1 1 de x t e n d a b l e a t1 a s t ,b a s e do n t h ed i s t r i b u t e dp r o g r a mc o n t r o lt e c h n 0 1 0 9 y ,w ei m p l e m e n t e dt h en e w z h c j i a n gu n i v e r s i t yo n h n ej u d g es y s t e m c o m p a r e dw i t hm eo l do n l i n e j u d g e ,t h en e wo n l i n ej u d g ci sm o r ep o w e r f i l l 1 【e y 朋r d sp r o 舯mc o n 们l ,s y s t e mc a l l sd i s a b l e ,d i s 啊b u t c ds y s t e m 2 浙江大学硕士学位论文 图目录 图目录 图3 1 程序控制流程图 图5 1m v c 流程图 图5 2 系统模块图 :;! ; ! 1 6 图5 3 用户用例图3 7 图5 4 管理员用例图 图5 5 判题服务器流程图 4 3 8 4 2 浙江大学硕士学位论文 袁目录 表目录 表3 1i n ts e t r l i m i t ( i 1 1 tr e s o u r c e ,c o n s ts t r i l c td i m i t + r l i m ) 的使用方法1 5 表3 - 2 修改中断向量表与p 仃a c c 的比较2 5 表5 1 错误信息表4 1 表5 - 2 压力测试结果4 4 5 浙江大学硕士学位论文第1 章绪论 第l 章绪论 1 1 程序监控技术的产生背景及意义 随着人类步入信息化社会,计算机技术在各个领域中都得到了越来越广泛的 应用,社会的发展要求大学生具备较高的计算机应用能力,计算机程序设计是更 好地培养大学生计算机应用能力的重要手段。因此,培养和提高大学生的程序设 计能力,无论在计算机专业还是非计算机专业,都是高校人才培养的一个基础和 重要的环节。 长期以来,围绕着培养和提高学生的程序设计能力。在国内高校的教学活动 中,存在着一些弊端:首先,教学理念上重教轻学,重理论轻实践,导致培养出 来的学生,熟知语言知识,擅长应付卷面考试,缺乏解决实际问题的能力;其次, 教学方法和手段的相对落后制约了课程教学质量,特别是实践教学质量的提高, 例如,如何培养和评价学生的编程能力就是一个难题;再则,没有科学地发挥以 程序设计竞赛为代表的课外实践活动的作用,只重视课程教学,忽略了通过竞赛 激发学生的学习热情。 近几年来,在线判题系统有了很大发展。浙江大学推出的z h c j i 锄g u n i v e r s i t y o n l i n cj u d g z o j ) 已经运行了6 年。在此期间,有两百多万人次通过在线判题系 统提交程序。无数计算机人才与z 0 j 共同成长。与此同时,这种用户提交程序、 服务器自动判题的模式被应用到了各种教学活动中,如数值分析作业的自动批 改、c 语言程序设计考试、研究生上机考试等。这些应用不仅培养了学生学习兴 趣,提高了学生的动手能力,而且大大减轻了教师的负担。 在线程序设计竞赛、编程上机考试、在线判题等系统有一个共同点,就是需 要在服务器上运行用户提交的程序,因此存在着一定安全隐患。用户提交的程序 并不是完美的,有可能存在着缺陷,如消耗过多时间、内存,如果对用户提交的 6 浙江大学硕士学位论文第l 章绪论 程序不加限制,直接在服务器上运行,势必会占用大量服务器资源,使服务器运 行缓慢、甚至崩溃。一些用户甚至会提交一些病毒或木马等恶意代码,如果服务 器运行了这些恶意代码,后果不堪设想。因此,此类系统中必须使用程序监控技 术对用户提交的程序进行限制。 程序监控是对用户程序运行时的内存使用、执行时间、系统调用等一系列参 数、行为进行监视与控制的技术。程序监控程序可以在限定的环境( 包括时间、 内存空间、磁盘空间等) 内执行用户程序,并对用户程序的行为操作进行限制, 保证用户程序在有限的资源下执行我们允许的操作。 1 2 程序监控技术发展现状 在n n u x 操作系统下,传统的方法是使用系统提供的s e m i m i t o 函数。s e t r l i m i t o 函数能对用户程序的运行时间、内存数量、线程数量等参数进行限制,可以满足 程序监控的一般要求。但是s e t d i i l l “o 函数也存在着很大的缺陷。通过s e t r l i l i l i t o 函数,我们并不能知道一些程序运行的详细参数,如内存使用数量等。用户程序 甚至可以通过系统调用,直接进行一些底层操作,如文件删除、读取等。这在对 安全性要求非常高的系统中是不能忍受的。因此,我们必须寻找新的手段来保证 程序监控技术的安全性。 1 3 本文的工作重点贡献 本文的重点是寻找安全、高效的程序监控方法,并将其应用到一个在线判题 系统中。 1 3 1 基于系统调用屏蔽的程序监控方法 u n u x 操作系统的任何底层的操作都是通过系统调用来实现的。因此,如果 我们有办法可以知道用户程序使用了那些系统调用,并对那些危险的系统调用 ( 文件、网络操作等) 进行屏蔽,那么就限制了用户进行一些危险操作,保证了 7 浙江大学硕士学位论文第l 章绪论 系统的安全性。 于是如何对用户系统调用的进行屏蔽成了程序监控技术的核心。本文提出了 两种方法。 第一种方法通过修改系统中断向量表,重载i m 8 0 中断,从而使监控程序获得 用户程序系统调用的监视权限。重载的i n t 8 0 中断会监视用户使用系统调用的情 况,如果用户使用了非法的系统调用,中断监视程序会阻止用户继续调用。 第二种方法使用p t r a c c 系统调用监控用户程序使用系统调用的情况。在p t r a 监视的进程中,当用户使用任何系统调用时,都会被监视进程捕捉到。此时监视 进程可以判断用户是否使用了非法的系统调用。如果用户使用了非法的系统调 用,监视进程可以将用户进程终止。 1 3 2 分布式的程序监控技术 程序监控技术经常会被应用于一些负荷很重的系统中。比如在大规模的在线 程序设计竞赛中,会有上千支队伍同时参加比赛。因此程序监控技术对性能有着 很高的要求。而编译、运行用户程序是一件非常消耗服务器c p u 时间的事情,单 台服务器不能满足需要。为了应付大规模的并发运行任务,我们需要使用分布式 的程序监控技术。所谓分布式的程序监控技术,就是使用两台以上的服务器组成 一个分布式系统,对一系列的用户程序的程序进行调度、运行并监控。 分布式的程序监控技术有着性能离、运行稳定,可扩展性强等优点。由于使 用了多台服务器,整个系统的计算能力成倍增长。即使有一台服务器出现故障, 也不会影响到整个系统的运行。当发现计算能力不够时,我们可以随时加入新的 服务器,以达到性能上的要求。 1 4 论文的组织结构 在第二章,我们将论述程序监控技术的背景,并讨论程序监控技术在具体应 用上的需要达到的要求。 8 浙江大学硕士学位论文 第l 章绪论 在第三章,我们将讨论在i j 肌x 操作系统下如何实现程序监控,并提出两种 方法。第一种方法通过修改系统中断向量表,重载i n t 8 0 中断,从而使监控程序 获得了用户程序系统调用的监视权限。第二种方法使用p t r a c e 系统调用监控用户 程序使用系统调用的情况。在本章的最后我们对着两种方法进行了对比。 在第四章,我们将讨论基于分布式的程序监控技术,并提出实现分布式程序 监控系统的方法。 在第五章,我们对原有的浙江大学在线判题系统性能低下的情况进行了分 析,找出了原因,并提出了解决方法。我们将分布式的程序监控技术应用于新的 浙江大学在线判题系统,使得系统性能大大提升。 以上章节中,第三、四、五章是本文作者的主要工作。 9 浙江大学硕士学位论文 第2 章技术背景 第2 章技术背景 2 1 程序监控技术要求 由于在线判题系统需要在服务器上运行大量用户提交的程序,安全性、高效 性、稳定性是必须考虑的。 2 1 1 安全性 在线判题系统中,用户提交的程序是在服务器上运行的,如果对用户程序不 加以限制,就存在很大的安全隐患。 比如,对于一个问题,用户的程序可能使用了效率低的算法,对于大数据量 的测试数据,可能需要很长时间,甚至是死循环,永远不能结束。如果不对用户 程序运行时间加以限制,判题服务器必然会发生堵塞。又比如,用户提交的程序 可能会占用很多内存,如果一个用户程序申请了太多的内存,超过了服务器的物 理内存,判题服务器就会使用虚拟内存,那样会使服务器变得非常缓慢,甚至使 得系统崩溃。因此必须对用户程序使用的内存进行限制。甚至用户有时会提交恶 意的代码,或是一个特洛伊木马程序,等等。诸如此类的安全性问题还有很多, 我们必须使用程序监控技术加以限制。 2 1 2 高效性 所有用户的程序都是在判题服务器上运行的,这将占用服务器的c p u 资源, 如果用户数量很多,就有可能发生很多用户同时提交程序的情况。当用户提交的 程序需要运行很长时间时,判题服务器将无法及时的处理用户提交的程序,而发 生用户提交的阻塞,阻碍比赛的进行。这种情况是不能容忍的。如何让评测系统 更高效是一个值得探讨的问题。 浙江大学硕士学位论文第2 章技术背景 2 1 3 稳定性 在比赛时,服务器的稳定性直接影响了比赛的公正,因此保证服务器的稳定 是件非常重要的事情。 2 2 程序监控解决方案 2 2 1 系统调用屏蔽 2 2 1 1 系统调用简介 在l j n u x 操作系统中,系统调用是用于进行一些底层调用的主要方法。所谓 系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在 内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门( g a t e ) 陷入 f t r a p ) 实现。系统调用是用户程序和内核交互的接口。系统调用在l i n u x 系统中 发挥着巨大的作用如果没有系统调用,那么应用程序就失去了内核的支持。 我 们在编程时用到的很多函数,如f o r k 、o p e n 等这些函数最终都是在系统调用里 实现的。f o 水和e x 1 等函数都是g i b c 中的函数,但是如果我们跟踪函数的执行 过程,看看9 1 b c 对f o r k 和e x 计函数的实现就可以发现在g i b c 的实现代码里都 是采用软中断的方式陷入到内核中再通过系统调用实现函数的功能的【1 】。由此可 见,系统调用是用户接口在内核中的实现,如果没有系统调用,用户就不能利用 内核。 l i 加x 系统在c p u 的保护模式下提供了四个特权级别,目前内核都只用到了 其中的两个特权级别,分别为“特权级o ”和“特权级3 ”,级别0 也就是我们通常所 讲的内核模式,级别3 也就是我们通常所讲的用户模式。划分这两个级别主要是 对系统提供保护。内核模式可以执行一些特权指令和进入用户模式,而用户模式 则不能。这里特别提出的是,内核模式与用户模式分别使用自己的堆栈,当发 生模式切换的时候同时要进行堆栈的切换。每个进程都有自己的地址空间( 也 称为进程空间) ,进程的地址空间也分为两部分:用户空间和系统空间,在用户 1 1 浙江大学硕士学位论文第2 章技术背景 模式下只能访问进程的用户空间,在内核模式下则可以访问进程的全部地址空 间,这个地址空间里的地址是一个逻辑地址,通过系统段面式的管理机制,访问 的实际内存要做二级地址转换,即:逻辑地址、线性地址、物理地址。 系统调 用对于内核来说就相当于函数,我们是关键问题是从用户模式到内核模式的转 换、堆栈的切换以及参数的传递。 2 2 1 2 系统调用屏蔽技术 由于在王j n u x 操作系统中,所有的底层操作都是通过系统调用来实现的。如 果我们可以对用户使用系统操作的情况进行监视,禁止用户使用那些危险的系统 调用,那么就可以保证整个系统的安全性。 本文提出了两种监视用户程序系统调用情况的方法修改系统中断向量表 的方法和使用p t r a 系统调用的方法。 第一种方法通过修改系统中断向量表,重载i n t 8 0 中断,从而使监控程序获得 用户程序系统调用的监视权限。重载的i n t 8 0 中断会监视用户使用系统调用的情 况,如果用户使用了非法的系统调用,中断监视程序会阻止用户继续调用。 第二种方法使用p t r a c e 系统调用监控用户程序使用系统调用的情况。在p 仃a c c 监视的进程中,当用户使用任何系统调用时,都会被监视进程捕捉到。此时监视 进程可以判断用户是否使用了非法的系统调用。如果用户使用了非法的系统调 用,监视进程可以将用户进程终止。 2 2 2 应用分布式系统 通过应用分布式系统,我们可以解决系统的高效性与稳定性问题。首先,由 多台服务器组成的分布式判题系统可以成倍的提高运行效率。而且分布式系统易 于扩展,当出现计算能力不够的情况时,可以随时增加判题节点,以达到性能上 的要求。其次分布式系统的稳定性也非常的高,当某一台服务器的发生故障时, 还有其它服务器可以正常工作,并不会引起整个系统的崩溃。 浙江大学硕士学位论文 第3 章程序监控技术 第3 章程序监控技术 3 1 程序监控的必要性 判题系统允许用户提交程序源代码,在服务器上编译执行,并把用户程序的 输出与标准答案相比较之后,将结果返回显示给用户。作为一个判题系统来说, 由于允许用户提交程序源代码并在服务器上编译执行,其安全性是一个相当令人 头痛的问题。虽然可以去掉不必要的头文件禁止用户使用某些函数,但这样只是 在编译阶段起到保护作用,用户依然可以通过内嵌汇编的方式来执行系统调用。 因此需要更为切实有效的方式来保证安全性。 在判题系统中的用户提交的程序必须有一定的限制。比如,用户的提交的程 序不能使用太多的内存,程序不能运行很久,而且不能访问文件系统,不能使用 网络等等。为此,我们必须有一种控制程序运行的机制,来保证用户提交的有缺 陷的,甚至恶意的程序,不会对我们的判题系统造成影响。 3 2 程序运行控制 3 2 1 程序控制流程 为控制用户程序运行,我们有如下的思路。运行控制程序需要为用户提交的 程序创建单独的进程,并由运行控制程序监控用户进程的运行。当用户进程出现 超过时间限制,超过内存限制,访问非法资源等情况时,运行控制程序需要将用 户进程终止,保护系统不被破坏。 当用户提交了一个程序,监控程序启动。首先,监控程序使用f o 矗0 命令,创 建一个子进程,用于运行用户的程序。在运行用户程序之前,子进程必须对运行 设置一系列的限制,如内存,时间,文件访问权限,进程数量等等。在完成这些 限制后,子进程启动用户提交的程序。同时,父进程会一直对子进程进行监控, 当子进程出现超过时间、内存限制,运行错误等情况时,父进程会中断子进程, 浙江大学硕士学位论文第3 章程序监控技术 并向用户返回结果。如果子进程正常结束,监控进程会判断用户程序的输出结果, 并给出是否正确的信息。具体的运行控制流程如下图所示。 ( 开始 ) 运行进程一程(父进程) i设置进程时间限制i j 等待子进程一定时间i _ l i 设置进程内存限制 i y 型 j 帕r t 2 9 5 扣e $ y 8 c 8 1 1 e x i t 饕o r k 2 9 6r e 8 t o r e a 1 1 : 2 9 7r e s t o r e - a l l 这段代码是s y s t 锄c a l l 的开头一段,首先是保存寄存器状态,以及有关 s y s t 锄一c 越lt m c c 的判断跳转。这与我们没有太大关系。接下来判断了系统调用号 是否非法: 2 8 4c 啦! $ f n r - 搴y 8 c a l l 8 e a 誓 2 8 5 ,a e8 y 8 c a l l b a d b y 8 n r j y s c a l l 的定义在e n t 够s 的5 2 行 5 2l d e i n e n r d y 8 c a l l 8 “8 y 8 c a l l t a b l e 一8 i = e ,4 i i r ,y s c a l l 的定义在锄t 哆s 的9 0 5 行 9 0 5g y b c a l l t a b l e 8 i z e - i e y 8 c a l l t a b l e l 这里引用的s y 跗c a l l - t a b l e 也是e n t 彤s 的一部分,它包含了各个系统调用处理 函数的入口。如下; 6 1 8e n t r y ( 8 y 拿c a l l t a b l e ) 6 1 9 l o n g8 y 8 r e 8 t a r t 一8 y 8 c a l l 6 2 0 6 2 l 6 2 2 6 2 3 6 2 _ 9 0 2 9 0 3 9 0 4 9 0 5 o - 0 1 d 。b e t u p ( ) 。b y b t e mc a l l ,u 8 e df o r 弛8 t a r t i n g , 。王o n ge y 粤每x i t 1 0 n g8 y 8 _ f o z t 1 0 n g8 y 目r e a d 1 0 n gs y 8 _ w r i t e 1 0 n ge y 8 o p e n5o 1 0 n gs y 8 n i j y 8 c a l l,。r e 8 e r v e df o rk e x e c 1 0 n g8 y b w a i t i d b y 8 c a l l l t a b l e b i z e - ( o y 8 c a l l 一t a b l e 浙江大学硕士学位论文 第3 章程序监控技术 我们看到,如果系统调用号大于s y s u 切b l e - s i z e ,那么系统将转入 s y s c a l j b a d s y s 处理过程: 3 6 98 y 8 c a l l b a d 8 y eo 3 7 0 m 们,l 搴一e n o s y s ,e a x ( t e 8 p , 3 7 1 j i t pr e 8 i l i - e 肛8 e r 8 p 毒c e 这个过程其实就是s y s t e n l c a l l 的结束。我们后面将利用这一点来实现系统调 用的屏蔽。 实际执行具体系统调用的是第2 8 7 行: 2 8 7 c a l l 8 y 8 p a l l t a b l e l t e a x ,4 l 它直接调用了存放在s v sc a l l t a b l e 中的具体的系统调用处理函数。 从以上代码可以看出,在i n t 8 0 被触发时,c 戤寄存器中存放的就是程序要调 用的系统调用号。如果该值大于s y s c a l l j a b l c _ s i z e ,s y s t e m c a u 将不作处理直接返 回。因此可以通过截获i n t 8 0 中断的方式,对于要屏蔽的系统调用,用一个非法 值覆盖e a x 。这样就能起到屏蔽作用。而要截获i m 8 0 中断必须先修改中断描述符 表( i n i e 1 l p td c s 商p t o r t a b l e ) ,这只有在核心态才能做到。用户程序想用同样的方 法来恢复正常的系统调用是不可能的,安全性由此得到了保证。 要截获i n t 8 0 中断,必须修改中断描述符表,这只有在核心态才能做到。因此 我们实现了一个内核模块来完成这个步骤。 i n ti n i t j d u l e v o i d ) t 利用8 i d t 指令获取中断描述符表地址信息 a 8 m 。8 i d tt o 。l 。岫。i d t r ) ) ; ,得到i n t 8 0 地址 p 一土d t 8 0 t ( 8 t r u c ti d t ) l 王d t r b a 8 e + 8 o x 8 0 ) ; 保存旧i n t 8 0 地址 o r i g b y 8 c a l l - ( p i d t 8 0 一 o f f - 上i g h o f f _ 1 a w - ( u n b i g n e db h o r t n e 也一8 y 8 c 8 1 1 o x o o o o f f f , p i d t 8 0 一 o f f j n g h - l u n o i g n e d8 h o r t ) il n e w b y 8 c a l l 1 6 ) o x o o o o f f f ) ; r e t u r no : 浙江大学硕士学位论文第3 章程序监控技术 i dc l e n u p o d u l e v o i d l t ,利用保存的i n t 8 0 地址恢复中断描述符表 p i d t 8 0 一 o f f 一1 0 w -( u d b i g n e d8 h o r t ) o r i g b y 8 c a l l o x o 0 0 0 f f f f ; p i d t 8 0 - o f f _ h i g h - t 岫_ i g n e d8 h o r t o r i g 8 y o c a l l 1 6j o x 0 0 0 0 f f f f ; r e t n r n ; ) l n y _ s t u b 是我们自己实现的新的i n t 8 0 中断,使用汇编语言实现。 e 譬t e r na s m l i n k a g ev 口i dd l y b t u b ; a 8 皿1 i n k a g ei n t8 y 9 c a l l - j i l t e r l i n te 缸i n te b x ,i n te c x ,i n te d x l : ,这里只是用来存放汇编代码的一个壳子。 v o i dn e w i n t b o l a 8 m 【。 9 1 0 b 1i y 一8 t u b a l i g n4 o x 9 0 i 昭l b t u b : ,保存所有寄存器 p u e h lt t e 8 ; p u 8 h 1 暑 d 8 ; p u 8 h 1 暑t e b p ; p u 8 h 1 毫e d i ; p u 8 h 1l t e s i ; p u g h l 鼍t e d z ; p u 8 h 1t t e c x ; p u 8 h 1 暑 e b x ; e 戤中保存了系统调用号。这里放在最后一个进栈主要是为了后面的恢复代 码能够更简洁 p u 8 h 1t e 5 x ; 调用日7 8 c a l l - f i l t e r ,也是自己实现的一个函数 p u 8 h 1 暑 e d x ; p u 8 h 1t 鼍e c x ; p u 8 h 1i e b x ; p u 8 h 1t t e h ; c a 工1 着l : a d d l 亭0 x 1 0 鼍暑e b p ; ,判断返回值,为l 表示允许该系统调用,o 表示禁止 t e 8 t 1l e a x 毫e a x , 先恢复e “ p o p l 毫每e a x ; ,n 2n e x t ; ,返回o 。则在e 雠中填充一个非法的系统调用号 m o v l $ o x f f ,墨 e x ; n e x t l p o p lt t e b x ; 2 0 浙江大学硕士学位论文 第3 章程序监控技术 脚1t t e c x ; p o p l i e d x ; p o p lt t e 8 i ; p o p l e d i ; p o p l i e b p ; p o p l 毫 e a x 7 p o p 工l 墨d 8 ; p o p l 毫 e 8 ; ,调用原来的i n t 8 0 中断 j m p t o , 。:m 。t o r i g 8 y 8 c a l l ) ,。m 。( 8 y 8 c a l l i l t e r ) ) ; s y s c a l | _ 硼t e r 的实现: ,返回1 表示允许系统调用,o 表示禁止, a b i 吐i n k a g ei n te y 8 c a l l - f i l t e r l i n t8 y e c a l l i n td b x ,i n t e c x ,i n te d x t r e t 啪b y 8 c a l l - 8 t a t u 8 【8 y 8 c a l l l ; ) 这里的s v s c a l ls t a t l l s 是一个长度等于s v s 龆1 lt a b l es i z c 的常量数组。对于每 个系统调用,如果希望屏蔽该系统调用,则在s y s c a l ls t a t 峪对应位置填入0 ,否 则填入1 。这样,我们就实现了在u n u x 系统下对系统调用的屏蔽。 事实上,对所有进程都屏蔽掉特定系统调用将导致整个u n u x 系统无法正常 运行。作为一个0 咀i i i l ej u d g es y s t e m ,执行编译后的用户程序是通过f o f k 系统调 用来实现的。因此只需要对特定进程屏蔽系统调用即可。这可以通过c u 盯e n t 指针, 在n a g 域中设置一个特定的b “位来实现。在s y s c a l lf i l t e r 函数中若发现该b i t 位 未被设置,则一律返回o ,即允许系统调用。这样就可以做到既保证安全性,又 不影响系统正常运行。当然,在s y s c a uf i l t e r 函数中进行检查效率会降低整个系 统的性能,因为涉及到多余的压栈出栈操作。若要对性能进行优化,可以在 m ”t u b 模块中用汇编代码来实现这个检查过程。另外,s y s c a l l j i l t e r 的实际实现 要稍微复杂一些,因为还要发送信号给监控进程,通知它用户程序企图调用被禁 止的系统调用,监控进程会随即k n l 用户程序并将结果返回显示。 3 3 2p t r a c e ( ) 屏蔽系统调用 3 3 2 1p t r a c e ( ) 简介 浙江大学硕士学位论文第3 章程序监控技术 p n e o 是一个可以使进程对对另外一个进程的执行进行监控的系统调用,它 也可以读取或改变被监视进程的内存核心镜像。被跟踪的进程会向一般的程序一 样执行,知道某以信号量被触发。此时,被跟踪的进程将被暂停,并且这个信号 量将被主进程收到。主进程此时可以对被跟踪的进程进行观察,还可以继续或终 止被跟踪的进程【3 】。 p t r a c c 定义在s y s p t r a c e h 头文件中,具体如下: l o n gj n tp t r a c e ( c n u m j n a c c _ r e q u e s tf e q u e s t ,p i 4 jp j d ,v o i d a d d i ;v o i d + d a t a ) 盯t r a 刚e ( 阿a c et r a c e m e ) 将当前进程切换到停止状态。它通 常总是与f o r k c x c c 一起使用,虽然也能遇到自我追踪的应用程序;对于每一个进 程,p 1 1 豫a c em e 只能被调用一次。追踪一个正被追踪的进程是会失败的( 另 一个较不重要的结果是进程不能追踪它自己。如果要这样做,应该首先从自身派 生个进程) 。大量的反调试技术都是以这一事实为基础的。为了克服这类技术, 必须使用绕过p t r a c e 的调试器。一个信号被发送到正被调试的进程,并将该进程 切换到停止状态,该进程可以使用从父进程上下文中调用的p tc o n 珊n 1 i e 和 p 1 j t e p 命令从停止状态退出。w a i t 函数会延迟父进程的执行,直到被调试的进 程切换为停止状态或者终止为止( 终止肘,返回值为1 4 0 7 ) 。其他的所有参数都 被忽略。 玎积c h ( p 1 1 r a 皿a 叽a c h ) 将进程标志为p i d 的运行进程切换为停止 状态,在这种情形下,调试器进程成为“父进程”。其他的所有参数都被忽略。 进程必须具有与调试进程相同的用户标志( u i d ) ,并且不能是s e t u i 帕c t d u i d 进程 ( 否则就要用r 0 0 t 来调试) 。 卵e b 妃h ( p 订矾a 三_ d 翻r a c h ) 停止进程标志为p i d 进程( 由p t 删c h 和p tt l l a c em e 指定) 的调试,并继续其常态运行。其他的所有参数都被忽略。 p 1 _ c 0 1 删e ( p 1 限a c ec o n t ) 继续进程标志为p i d 的被调试进程的执行。 而不中断与调试器进程的通信。如果a d d f = = 1 ( 在l m i i x 中为0 ) ,从上次停 止的地址继续执行;否则,从指定的地址继续执行。参数_ d a t a 指定发送到被调试 进程的信号数量( 零说明没有信号) 。 浙江大学硕士学位论文第3 章程序监控技术 p 1 - - s y s c a i i ,( 阿i a c es y s c a i i ) 执行进程标志为p i d 的进程,当进程调 用系统调用时停止。 p ts t e p ( p r i r a c es 玳g u 强t e p ) 进行进程标志为p i d 的进程的单步执行, 即执行下一条机器指令并切换为停止状态( 在i 3 8 6 中,这是根据设置追踪标志来 实现的,虽然

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论