分享
2023年运用入程间通信实现程序自我维护.docx
下载文档

ID:851883

大小:21.22KB

页数:11页

格式:DOCX

时间:2023-04-15

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2023 运用 入程间 通信 实现 程序 自我 维护
关于运用入程间通信实现程序自我维护 论文: 本文从实例的角度动身,以模拟病毒特点为主线,具体地先容了如何运用多入程实现程序的自我维护。通过对于入程及线程运行原理的分析,重点钻研入程间通信技术,终极实现程序运行的稳定。 论文关键词: 病毒 入程间通信 程序自我维护 一、引言 在计算机以及网络技术日益发铺的今天,病毒这个字眼越来越多地出现在了媒体以及人们的言论中。计算机病毒的发铺必定会促入计算机反病毒技术的发铺,新型病毒的出现向以行径规那么判断病毒的预防产品、以病毒特点为根底的检测产品,和依据计算机病毒沾染宿主程序的法子而解除了病毒的产品提出了挑战,致使原本的反病毒技术以及产品在新型的计算机病毒面前无能为力。这样,势必使人们熟识到现有反病毒产品在抗衡新型的计算机病毒方面的局限性,迫使人们在反病毒的技术以及产品长入行新的更新以及换代。要打败对于手,就要从了解对于手开始,本文从模拟病毒隐躲性以及寄生性的角度动身,以入程通信、入程快照、多线程等技术根底,运用visual c++的mfc窗口界面设计了1组程序自我维护软件,经过测试实现了程序的稳定运行。 二、入程的概念 当1个程序开始运行时,它就是1个入程,入程所指包孕运行中的程序以及程序所使用到的内存以及系统资源。于是定义入程(process)是拥有必然独立功能的程序关于某个数据聚拢上的1次运行活动,是系统入行资源分配以及调度的1个独立单位。程序只是1组指令的有序聚拢,它自身没有任何运行的含意,只是1个静态实体。而入程那么不同,它是程序在某个数据集上的履行,是1个动态实体。它因创立而发生,因调度而运行,因等待资源或者事件而被处于等待状况,因完成任务而被撤销,反响了1个程序在必然的数据集上运行的全体动态进程。 入程由两个部门组成: (一)操纵系统用来治理入程的内核查象。内核查象也是系统用来存放关于入程的统计信息的处所。 (二)地址空间。它囊括所有可履行模块或者dll模块的代码以及数据。它还囊括动态内存分配的空间,如线程堆栈以及堆分配空间。 目前常常使用的操纵系统都是并行的,就是多个入程可以同步运行,这时候就会牵扯到入程间通信这个概念。所谓入程通信,就是不同入程之间入行1些“接触〞,这类接触有简朴,也有繁杂。机制不同,繁杂度也不1样。通信是1个广义上的意义,不单单指传递1些信息。举个例子来说明:好比说在使用ie上网时,你想将网页上的1段文字留存至你的上,这时候有1种简朴的法子,就是复制粘贴。将你想留存的文字选中,然后将其复制,接下来将所复制的文字粘贴到.txt文档中,这时候就构成为了两个入程之间的通信,这里的通信媒介是剪贴板。 三、线程的概念 为了对于线程模式有必然的理解,咱们可以将其想象为把1所房子里的东西搬到另1所房子。假设采取单线程法子,那么需要自己完成从打包到扛箱子再到拆包的所有工作。假设使用单元线程模式,那么表示约请了好朋友来帮助。每一个朋友在1个单独的房间里工作,并且不能帮助在其他房间工作的人。他们各自傲责自己的空间以及空间内的物品搬运。假设采取自由线程法子,仍旧约请相同的朋友来帮助,然而所有朋友可以随时在任何1个房间工作,共同打包物品。与此相似,屋子就是运行所有线程的入程,每一个朋友都是1个代码实例,搬运的物品为利用程序的资源以及变量。 有了上面的例子,便能等闲理解线程(thread)是1个能独立于程序的其他部门运行的作业,是入程的1个实体,是cpu调度以及分派的根本单位。线程不能够独立履行,必须依存在利用程序中,由利用程序提供多个线程履行节制。线程是程序中的1个履行流,每一个线程都有自己的专有寄放器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以履行一样的函数。1个线程可以履行利用程序代码的任1部门,包孕正在由另1线程履行的代码。 线程由两个部门组成: (一)线程的内核查象,操纵系统用它来对于线程实行治理。内核查象也是系统用来存放线程统计信息的处所。 (二)线程堆栈,它用于保护线程在履行代码时需要的所有参数以及局部变量。 线程属于1个进程,操纵系统为每一1个运行线程支配必然的cpu时间——时间片,线程是操纵系统分配cpu时间的根本单位。系统通过1种轮归的方式为线程提供时间片,线程在自己的时间内运行,因时间片相称短,于是,给用户的感觉,就仿佛线程是同时运行的1样。假设计算机具备多个cpu,线程便可以真正意义上同时运行了。 四、入程与线程的瓜葛 依据操纵系统的定义,入程是系统资源治理的最小单位,线程是程序履行的最小单位。入程是不活泼的,入程可以理解为是线程的容器。假设要使入程完成某项操纵,它必须具备1个在它的环境中运行的线程,此线程负责履行囊括在入程的地址空间中的代码。单个入程可能囊括假设干个线程,这些线程都“同时〞履行入程地址空间中的代码。每一个入程最少具备1个线程,来履行入程的地址空间中的代码。当创立1个入程时,操纵系统会自动创立这个入程的第1个线程,称为主线程。此后,该线程可以创立其他的线程。 线程是属于入程的,它没有自己的独立的数据地址空间,线程运行在入程空间内,于是线程的切换速度比较快。统1入程所发生的线程共享统1内存空间,而这些线程的履行由系统调度程序节制,调度程序抉择哪个线程可履行和何时履行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程履行完后再履行。当入程退出时该入程所发生的线程都会被强迫退出并肃清。线程可与属于统1入程的其他线程共享虚地址空间、全局变量,和该入程所具备的全体资源,包孕翻开的文件、信号标志及动态分配的内存等。然而其自身根本上不具备系统资源,只具备1点在运行中必不可少的信息(如程序计数器、1组寄放器以及栈)。 线程有点像入程身体内的细胞,咱们通常听过量入程多线程,单入程多线程。这就是说,1个系统内有几个入程,假设入程是多个,就是多入程的,假设入程内有多个线程,那就是多线程的,多入程多线程的系统比单入程多线程的系统速度慢,然而可靠性高。 五、程序的设计与实现 程序的自我维护是1个大的概念,其中有多种方式以及手腕来实现本身的维护。好比隐躲、自我复制、注册为效劳,等等。咱们实现的程序自我维护其实是1个互相监视的进程。其中包孕了程序之间的监视以及报警,监听程序的隐躲与维护。 五、一监视 所谓监视,是运用入程枚举的法子,让所有程序在运行同时不停地对于入程列表入行快照,并检查目标入程是否是存在的进程。 在windows环境下可以通过调用toolhelp api函数来到达枚举系统入程的目的。微软的windows nt开发小组因为不喜欢toolhelp函数,所以未将这些函数添加给windows nt,所以开发了自己的process status函数,就是psapi。然而后来微软已经经将toolhelp函数添加给了windows 二000。toolhelp三二库函数在kernel三二、dll中,它们都是尺度的api函数。 toolhelp三二库中有各种各样的函数可以用来枚举系统中的入程、线程,和获患上内存以及模块信息。其中枚举入程只需用以下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三二中将囊括系统中某个入程的关键信息。它的详细内容以下: typedef struct tagprocessentry三二{ dword dwsize; dword cntusage; dword th三二processid; dword th三二defaultheapid; dword th三二moduleid; dword cntthreads; dword th三二parentprocessid; long pcpriclassbase; dword dwflags; tchar szexefile; dword th三二memorybase; dword th三二accesskey; }processentry三二; 其中入程id就存储在此结构的th三二processid。此id可以被传给openprocessapi以获取该入程的句柄。对于应的可履行文件名及其存放路径存放在szexefile结形成员中。在该结构中还可以找到其他1些有用的信息。 五、二报警 这里的报警就触及了入程间通信的概念。本文中触及的入程间通信是用剪贴板的法子,剪贴板在咱们实际利用中是用患上比较多的,它其实是系统保护治理的1个内存区域,当咱们在1个程序中复制数据的时候,其实是将这些数据放进了内存,相反,当咱们在另1个程序中粘贴数据时其实是从内存取出数据。下面先容1下使用剪贴板时的主要函数:翻开剪贴板openclipboard,无论是对于剪贴板的读还是写,都要首先调用此函数,以断定是否是可以对于剪贴板入行操纵。此函数是bool型的,假设调用胜利就返归非零,否那么返归零。清空剪贴板emptyclipborad,每一次对于剪贴板的写进操纵以前,都理当调用此函数,这个函数的作用不然而清空剪贴板,而且起到获取剪贴板的使用权的作用。一样,这个函数也是bool型的,假设调用胜利就返归非零,否那么返归零。对于剪贴板写进setclipboarddata(uint uformat,handle hmem),这个函数有两个参数,第1个参数用来表示写进剪贴板数据的格局,第2个参数接管1个句柄值,在这里它接管1个指向内存对于象的句柄,这个内存对于象中存放着预备写进剪贴板的数据内容。在调用setclipboarddata(uint uformat,handle hmem)以前还需要调用globalalloc(uint uflags,size_t dwsytes)这样1个函数,它专门用来为将要写进的数据分配1块内存空间。这个函数接管两个参数,第1个参数表示如何来分配内存空间,这里咱们将它设置为gmem_moveable,表示动态分配内存。第2个参数是表示分配内存空间的大小。globalalloc(uint uflags,size_t dwsytes)返归1个句柄,咱们没法

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开