利用進程間通信實現程序自我保護

學識都 人氣:1.46W
利用進程間通信實現程序自我保護

論文摘要: 本文從實例的角度出發,以模擬病毒特徵爲主線,詳細地介紹瞭如何利用多進程實現程序的自我保護。通過對進程及線程運行原理的分析,重點研究進程間通信技術,最終實現程序運行的穩定。

論文關鍵詞: 病毒 進程間通信 程序自我保護

1.引言

  在和網絡技術日益發展的今天,病毒這個字眼越來越多地出現在了媒體和人們的言論中。計算機病毒的發展必然會促進計算機反病毒技術的發展,新型病毒的出現向以行爲規則判定病毒的產品、以病毒特徵爲基礎的檢測產品,以及根據計算機病毒傳染宿主程序的方法而消除病毒的產品提出了挑戰,致使原有的反病毒技術和產品在新型的計算機病毒面前無能爲力。這樣,勢必使人們認識到現有反病毒產品在對抗新型的計算機病毒方面的侷限性,迫使人們在反病毒的技術和產品上進行新的更新和換代。要打敗對手,就要從瞭解對手開始,本文從模擬病毒隱藏性和寄生性的角度出發,以進程通信、進程快照、多線程等技術基礎,利用Visual C++的MFC窗口界面設計了一組程序自我保護軟件,經過測試實現了程序的穩定運行。

  2.進程的概念

當一個程序開始運行時,它就是一個進程,進程所指包括運行中的程序和程序所使用到的內存和系統資源。因此定義進程(Process)是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位。程序只是一組指令的有序集合,它本身沒有任何運行的含義,只是一個靜態實體。而進程則不同,它是程序在某個數據集上的執行,是一個動態實體。它因創建而產生,因調度而運行,因等待資源或事件而被處於等待狀態,因完成任務而被撤銷,反映了一個程序在一定的數據集上運行的全部動態過程。
進程由兩個部分組成:
(1)操作系統用來進程的內核對象。內核對象也是系統用來存放關於進程的統計信息的地方。
(2)地址空間。它包含所有可執行模塊或DLL模塊的代碼和數據。它還包含動態內存分配的空間,如線程堆棧和堆分配空間。
目前常用的操作系統都是並行的,就是多個進程可以同步運行,這時就會牽扯到進程間通信這個概念。所謂進程通信,就是不同進程之間進行一些“接觸”,這種接觸有簡單,也有複雜。機制不同,複雜度也不一樣。通信是一個廣義上的意義,不僅僅指傳遞一些信息。舉個例子來說明:比如說在使用IE上網時,你想將網頁上的一段文字保存至你的電腦上,這時有一種簡單的方法,就是複製粘貼。將你想保存的文字選中,然後將其複製,接下來將所複製的文字粘貼到文檔中,這時就形成了兩個進程之間的通信,這裏的通信媒介是剪貼板。

  3.線程的概念

爲了對線程模式有一定的理解,我們可以將其想象爲把一所屋子裏的東西搬到另一所屋子。如果採用單線程方法,則需要自己完成從打包到扛箱子再到拆包的所有工作。如果使用單元線程模式,則表示邀請了好朋友來幫忙。每個朋友在一個單獨的房間裏工作,並且不能幫助在其他房間工作的人。他們各自負責自己的空間和空間內的物品搬運。如果採用自由線程方法,仍然邀請相同的朋友來幫忙,但是所有朋友可以隨時在任何一個房間工作,共同打包物品。與此類似,房子就是運行所有線程的進程,每個朋友都是一個代碼實例,搬運的物品爲應用程序的資源和變量。
有了上面的例子,便能容易理解線程(Thread)是一個能獨立於程序的其他部分運行的作業,是進程的一個實體,是CPU調度和分派的基本單位。線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。線程是程序中的一個執行流,每個線程都有自己的專有寄存器(棧指針、程序計數器等),但代碼區是共享的,即不同的線程可以執行同樣的函數。一個線程可以執行應用程序代碼的任一部分,包括正在由另一線程執行的代碼。
線程由兩個部分組成:
(1)線程的內核對象,操作系統用它來對線程實施管理。內核對象也是系統用來存放線程統計信息的地方。
(2)線程堆棧,它用於維護線程在執行代碼時需要的所有參數和局部變量。
線程屬於一個過程,操作系統爲每一個運行線程安排一定的CPU時間——時間片,線程是操作系統分配CPU時間的基本單位。系統通過一種循環的方式爲線程提供時間片,線程在自己的時間內運行,因時間片相當短,因此,給用戶的感覺,就好像線程是同時運行的一樣。如果計算機擁有多個CPU,線程就能真正意義上同時運行了。

  4.進程與線程的關係

根據操作系統的定義,進程是系統資源管理的最小單位,線程是程序執行的最小單位。進程是不活潑的,進程可以理解爲是線程的容器。若要使進程完成某項操作,它必須擁有一個在它的中運行的線程,此線程負責執行包含在進程的地址空間中的代碼。單個進程可能包含若干個線程,這些線程都“同時”執行進程地址空間中的'代碼。每個進程至少擁有一個線程,來執行進程的地址空間中的代碼。當創建一個進程時,操作系統會自動創建這個進程的第一個線程,稱爲主線程。此後,該線程可以創建其他的線程。