关于运用入程间通信实现程序自我维护_第1页
关于运用入程间通信实现程序自我维护_第2页
关于运用入程间通信实现程序自我维护_第3页
关于运用入程间通信实现程序自我维护_第4页
关于运用入程间通信实现程序自我维护_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1 / 13关于运用入程间通信实现程序自我维护论文摘要:从实例的角度动身,以模拟病毒特点为主线,具体地先容了如何运用多入程实现程序的自我维护。通过对于入程及线程运行原理的分析,重点钻研入程间通信技术,终极实现程序运行的稳定。 论文关键词:病毒入程间通信程序自我维护 一.引言 在计算机以及网络技术日益发铺的今天,病毒这个字眼越来越多地出现在了媒体以及人们的言论中。计算机病毒的发铺必定会促入计算机反病毒技术的发铺,新型病毒的出现向以行径规则判断病毒的预防产品、以病毒特点为基础的检测产品,和依据计算机病毒沾染宿主程序的法子而解除了病毒的产品提出了挑战,致使原本的反病毒技术以及产品在新型的计算机病毒面前无能为力。这样,势必使人们熟识到现有反病毒产品在抗衡新型的计算机病毒方面的局限性,迫使人们在反病毒的技术以及产品长入行2 / 13新的更新以及换代。要打败对于手,就要从了解对于手开始,从模拟病毒隐躲性以及寄生性的角度动身,以入程通信、入程快照、多线程等技术基础,运用 VisualC+的 MFC窗口界面设计了 1 组程序自我维护软件,经过测试实现了程序的稳定运行。 二.入程的概念 当 1 个程序开始运行时,它就是 1 个入程,入程所指包孕运行中的程序以及程序所使用到的内存以及系统资源。于是定义入程是拥有必然独立功能的程序关于某个数据聚拢上的 1 次运行活动,是系统入行资源分配以及调度的 1 个独立单位。程序只是 1 组指令的有序聚拢,它自身没有任何运行的含意,只是 1 个静态实体。而入程则不同,它是程序在某个数据集上的履行,是 1 个动态实体。它因创立而发生,因调度而运行,因等待资源或者事件而被处于等待状况,因完成任务而被撤销,反应了 1 个程序在必然的数据集上运行的全体动态进程。 入程由两个部门组成: 操纵系统用来治理入程的内核查象。内核查象也是3 / 13系统用来寄存关于入程的统计信息的处所。 地址空间。它囊括所有可履行模块或者 DLL 模块的代码以及数据。它还囊括动态内存分配的空间,如线程堆栈以及堆分配空间。 目前常常使用的操纵系统都是并行的,就是多个入程可以同步运行,这时候就会牵扯到入程间通信这个概念。所谓入程通信,就是不同入程之间入行 1 些“接触” ,这类接触有简朴,也有繁杂。机制不同,繁杂度也不 1 样。通信是 1 个广义上的意义,不单单指传递 1 些信息。举个例子来说明:好比说在使用 IE 上网时,你想将网页上的 1 段文字留存至你的电脑上,这时候有 1 种简朴的法子,就是复制粘贴。将你想留存的文字选中,然后将其复制,接下来将所复制的文字粘贴到.TXT 文档中,这时候就构成为了两个入程之间的通信,这里的通信媒介是剪贴板。 三.线程的概念 为了对于线程模式有必然的理解,咱们可以将其想象为把 1 所房子里的东西搬到另 1 所房子。假设采取单线程法子,则需要自己完成从打包到扛箱子再到拆包的所有4 / 13工作。假设使用单元线程模式,则表示约请了好朋友来帮忙。每一个朋友在 1 个单独的房间里工作,并且不能帮助在其他房间工作的人。他们各自傲责自己的空间以及空间内的物品搬运。假设采取自由线程法子,仍旧约请相同的朋友来帮忙,然而所有朋友可以随时在任何 1 个房间工作,共同打包物品。与此相似,屋子就是运行所有线程的入程,每一个朋友都是 1 个代码实例,搬运的物品为利用程序的资源以及变量。 有了上面的例子,便能等闲理解线程是 1 个能独立于程序的其他部门运行的作业,是入程的 1 个实体,是 CPU调度以及分派的基本单位。线程不能够独立履行,必须依存在利用程序中,由利用程序提供多个线程履行节制。线程是程序中的 1 个履行流,每一个线程都有自己的专有寄放器,但代码区是共享的,即不同的线程可以履行一样的函数。1 个线程可以履行利用程序代码的任 1 部门,包孕正在由另 1 线程履行的代码。 线程由两个部门组成: 线程的内核查象,操纵系统用它来对于线程实行治5 / 13理。内核查象也是系统用来寄存线程统计信息的处所。 线程堆栈,它用于保护线程在履行代码时需要的所有参数以及局部变量。 线程属于 1 个进程,操纵系统为每一 1 个运行线程支配必然的 CPU 时间时间片,线程是操纵系统分配 CPU时间的基本单位。系统通过 1 种轮归的方式为线程提供时间片,线程在自己的时间内运行,因时间片相称短,于是,给用户的感觉,就仿佛线程是同时运行的 1 样。假设计算机具备多个 CPU,线程便可以真正意义上同时运行了。 四.入程与线程的瓜葛 依据操纵系统的定义,入程是系统资源治理的最小单位,线程是程序履行的最小单位。入程是不活泼的,入程可以理解为是线程的容器。若要使入程完成某项操纵,它必须具备 1 个在它的环境中运行的线程,此线程负责履行囊括在入程的地址空间中的代码。单个入程可能囊括若干个线程,这些线程都“同时”履行入程地址空间中的代码。每一个入程最少具备 1 个线程,来履行入程的地址空间中的代码。当创立 1 个入程时,操纵系统会自动创立这6 / 13个入程的第 1 个线程,称为主线程。尔后,该线程可以创立其他的线程。 线程是属于入程的,它没有自己的独立的数据地址空间,线程运行在入程空间内,于是线程的切换速度比较快。统 1 入程所发生的线程共享统 1 内存空间,而这些线程的履行由系统调度程序节制,调度程序抉择哪个线程可履行和何时履行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程履行完后再履行。当入程退出时该入程所发生的线程都会被强迫退出并肃清。线程可与属于统 1 入程的其他线程共享虚地址空间、全局变量,和该入程所具备的全体资源,包孕打开的文件、信号标志及动态分配的内存等。然而其自身基本上不具备系统资源,只具备 1 点在运行中必不可少的信息。 线程有点像入程身体内的细胞,咱们通常听过量入程多线程,单入程多线程。这就是说,1 个系统内有几个入程,假设入程是多个,就是多入程的,假设入程内有多个线程,那就是多线程的,多入程多线程的系统比单入程多线程的系统速度慢,然而可靠性高。 五.程序的设计与实现 7 / 13程序的自我维护是 1 个大的概念,其中有多种方式以及手腕来实现本身的维护。好比隐躲、自我复制、注册为服务,等等。咱们实现的程序自我维护其实是 1 个互相监视的进程。其中包孕了程序之间的监视以及报警,监听程序的隐躲与维护。 五.一监视 所谓监视,是运用入程枚举的法子,让所有程序在运行同时不停地对于入程列表入行快照,并检查目标入程是否是存在的进程。 在 Windows 环境下可以通过调用 ToolHelpAPI 函数来到达枚举系统入程的目的。微软的 WindowsNT 开发小组因为不喜欢 ToolHelp 函数,所以未将这些函数添加给WindowsNT,所以开发了自己的 ProcessStatus 函数,就是PSAPI。然而后来微软已经经将 ToolHelp 函数添加给了Windows 二 000。ToolHelp 三二库函数在 KERNEL 三二.dll中,它们都是尺度的 API 函数。 ToolHelp 三二库中有各种各样的函数可以用来枚举8 / 13系统中的入程、线程,和获患上内存以及模块信息。其中枚举入程只需用以下 3 个的函数:CreateToolhelp 三二Snapshot、Process 三二 First 以及 Process 三二 Next。 使用 ToolHelp 三二函数的第 1 步是用CreateToolhelp 三二 Snapshot 函数创立系统信息“快照” 。这个函数可让你选择存储在快照中的信息类型。假设你只是对于入程信息感喜爱,那么只要囊括 TH 三二CS_SNAPPROCESS 标志即可。CreateToolhelp 三二 Snapshot函数返归 1 个 HANDLE,完成调用以后,必须将此 HANDLE 传给 CloseHandle。 接下来是调用 1 次 Process 三二 First 函数,从快照中获患上入程列表,然后重复调用 Process 三二 Next,直到函数返归 FALSE 为止。这样将遍历快照中入程列表。这两个函数都带两个参数,它们分别是快照句柄以及 1 个PROCESSENTRY 三二结构。 调用完 Process 三二 First 或者 Process 三二 Next以后,PROCESSENTRY 三二中将囊括系统中某个入程的关键信息。它的详细内容以下: 9 / 13typedefstructtagPROCESSENTRY 三二 DWORDdwSize; DWORDcntUsage; DWORDth 三二 ProcessID; DWORDth 三二 DefaultHeapID; DWORDth 三二 ModuleID; DWORDcntThreads; DWORDth 三二ParentProcessID;LONGpcPriClassBase; DWORDdwFlags; TCHARszExeFile; 10 / 13DWORDth 三二 MemoryBase; DWORDth 三二 AccessKey; PROCESSENTRY 三二; 其中入程 ID 就存储在此结构的 th 三二 ProcessID。此 ID 可以被传给 OpenProcessAPI 以获取该入程的句柄。对于应的可履行文件名及其寄存路径寄存在 szExeFile 结形成员中。在该结构中还可以找到其他 1 些有用的信息。 五.二报警 这里的报警就触及了入程间通信的概念。中触及的入程间通信是用剪贴板的法子,剪贴板在咱们实际利用中是用患上比较多的,它其实是系统保护治理的 1 个内存区域,当咱们在 1 个程序中复制数据的时候,其实是将这些数据放进了内存,相反,当咱们在另 1 个程序中粘贴数据时其实是从内存取出数据。下面先容 1 下使用剪贴板时的主要函数:打开剪贴板 OpenClipboard,无论是对于剪贴板的读还是写,都要首先调用此函数,以断定是否是可以对于剪贴板入行操纵。此函数是 BOOL 型的,假设调用胜利就11 / 13返归非零,否则返归零。清空剪贴板 EmptyClipborad,每一次对于剪贴板的写进操纵以前,都理当调用此函数,这个函数的作用不然而清空剪贴板,而且起到获取剪贴板的使用权的作用。一样,这个函数也是 BOOL 型的,假设调用胜利就返归非零,否则返归零。对于剪贴板写进SetClipboardData,这个函数有两个参数,第 1 个参数用来表示写进剪贴板数据的格局,第 2 个参数接管 1 个句柄值,在这里它接管 1 个指向内存对于象的句柄,这个内存对于象中寄存着预备写进剪贴板的数据内容。在调用SetClipboardData 以前还需要调用 GlobalAlloc 这样 1 个函数,它专门用来为将要写进的数据分配 1 块内存空间。这个函数接管两个参数,第 1 个参数表示如何来分配内存空间,这里咱们将它设置为 GMEM_MOVEABLE,表示动态分配内存。第 2 个参数是表示分配内存空间的大小。GlobalAlloc 返归 1 个句柄,咱们没法使用句柄来间接的将数据放进内存,这时候就需要调用另 1 个函数GlobalLock,这个函数获取 1 个内存对于象的句柄,将这块内存加锁,返归 1 个指针,这时候咱们便可以够给指针所指向的这块内存写进数据了。这个函数使用 1 个内存计数,计数器基数为零,每一调用 1 次计数器加 1,所以每一调用 1 次的同时还需要调用此外 1 个函数 GlobalUnlock 来给计数器减 1,相称于取缔对于这块内存的锁定。设计的程12 / 13序实现报警功能就是在枚举入程以后发现目标入程被终止,从而在剪贴板中写进信息的进程。 五.三监听 所谓监听,就是报警的反方向,即从剪贴板中读出信息。从剪贴板读取数据的函数 GetClipboardData。这个函数只接管 1 个参数,参数指定读取的格局。读取信息以后,咱们还要对于信息入行 if 断定,假设信息是咱们预留的某个入程被收场的话,咱们就启动

温馨提示

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

评论

0/150

提交评论