當前位置:首頁 » 編程軟體 » 重新編譯程序校驗和

重新編譯程序校驗和

發布時間: 2024-10-31 11:35:51

① 今年軟考的程序員考綱是什麼

程序員考試大綱 一、考試說明 1.考試要求: (1)掌握數制及其轉換、數據的機內表示、算術和邏輯運算,以及相關的應用數學基礎知識; (2)理解計算機的組成以及各主要部件的性能指標; (3)掌握操作系統、程序設計語言的基礎知識; (4)熟練掌握計算機常用軟體的基本操作; (5)熟練掌握基本數據結構和常用演算法; (6)熟練掌握C程序設計語言,以及C++、java、Visual Basic其中一種程序設計語言; (7)熟悉資料庫、網路和多媒體的基礎知識; (8)掌握軟體工程的基礎知識,了解軟體過程基本知識、軟體開發項目管理的常識; (9)了解常用信息技術標准、安全性,以及有關法律、法規的基本知識; (10)了解信息化、計算機應用的基礎知識; (11)正確閱讀和理解計算機領域的簡單英文資料。 2.通過本考試的合格人員能根據軟體開發項目管理和軟體工程的要求,按照程序設計規格說明書編制並調試程序,寫出程序的相應文檔,產生符合標准規范的、實現設計要求的、能正確可靠運行的程序,具有助理工程師(或技術員)的實際工作能力和業務水平。 3.本考試設置的科目包括: (1)計算機硬軟體基礎知識,考試時間為150分鍾,筆試; (2)程序設計,考試時間為150分鍾,筆試。 二、考試范圍 考試科目1:計算機硬軟體基礎知識 1. 計算機科學基礎 1.1 數制及其轉換 二進制、十進制和十六進制等常用數制及其相互轉換 1.2 數據的表示 數的表示(原碼、反碼、補碼表示,整數和實數的機內表示方法,精度和溢出) 非數值表示(字元和漢字的機內表示、聲音和圖像的機內表示) 校驗方法和校驗碼(奇偶校驗碼、海明校驗碼) 1.3 算術運算和邏輯運算 計算機中二進制數的運算方法 邏輯代數的基本運算和邏輯表達式的化簡 1.4 數學應用 常用數值計算(矩陣、方程的近似求解、插值) 排列組合、應用統計(數據的統計分析) 1.5 常用數據結構 數組(表態數組、動態數組)、線性表、鏈表(單向鏈表、雙向鏈表、循環鏈表)、隊列、棧、樹(二叉樹、查找樹)、圖的定義、存儲和操作 1.6 常用演算法 常用的排序演算法、查找演算法、數值計算、字元串處理、數據壓縮演算法、遞歸演算法、圖的相關演算法 演算法與數據結構的關系,演算法效率,演算法設計,演算法描述(流程圖、偽代碼、決策表) 2. 計算機系統基礎知識 2.1 硬體基礎知識 2.1.1 計算機系統的組成,硬體系統、軟體系統及層次結構 2.1.2 計算機類型和特點 微機、工作站、伺服器、大型計算機、巨型計算機 2.1.3 中央處理器CPU 運算器和控制器的組成,常用的寄存器、指令系統、定址方式、指令執行控制、處理機性能 2.1.4 主存和輔存 存儲器系統 存儲介質(半導體、硬碟、光碟、快閃記憶體、軟盤、磁帶等) 主存儲器的組成、性能及基本原理 Cache的概念、虛擬存儲的概念 輔存設備的類型、特性、性能和容量計算 2.1.5 I/O介面、I/O設備和通信設備 I/O介面(匯流排、DMA、通道、SCSI、並行口、RS232C、USB、IEEE1394) I/O設備的類型和特性(鍵盤、滑鼠、顯示器、列印機、掃描儀、攝像頭,以及各種輔存設備) I/O設備控制方式(中斷控制、DMA) 通信設備的類型和特性(Modem、集線器、交換機、中繼器、路由器、網橋、網關)及其連接方法和連接介質(串列連接、並行連接,傳輸介質的類型和特性) 2.2 軟體基礎知識 2.2.1 操作系統基礎知識 操作系統的類型和功能 操作系統的內核(中斷控制)和進程概念 處理機管理、存儲管理、設備管理、文件管理、作業管理 漢字處理 圖形用戶界面及其操作方法 2.2.2 程序設計語言和語言處理程序基礎知識 匯編、編譯、解釋系統的基礎知識 程序設計語言的基本成分(數據、運算、控制和傳輸) 過程(函數)調用 2.3 網路基礎知識 網路的功能、分類、組成和拓撲結構 網路體系結構與協議(OSI/RM,TCP/IP) 常用網路設備與網路通信設備,網路操作系統基礎知識和使用 Client/Server結構、Browser/Server結構 LAN基礎知識 Internet基礎知識 2.4 資料庫基礎知識 資料庫管理系統的主要功能和特徵 資料庫模型(概念模式、外模式、內模式) 數據模型,ER圖 數據操作(關系運算) 資料庫語言(SQL) 資料庫的主要控制功能 2.5 多媒體基礎知識 多媒體基礎概念,常用多媒體設備性能特徵,常用多媒體文件格式類型 簡單圖形的繪制,圖像文件的基本處理方法 音頻和視頻信息的應用 簡單多媒體應用製作方法 2.6 系統性能指標 響應時間、吞吐量、周轉時間等概念 可靠性、可維護性、可擴充性、可移植性、可用性、可重用性、安全性等概念 2.7 計算機應用基礎知識和常用辦公軟體的操作方法 信息管理、數據處理、輔助設計、自動控制、科學計算、人工智慧等概念 文字處理基礎知識和常用操作方法 電子表格處理基礎知識和常用操作方法 演示文稿製作方法 電子郵件處理操作方法 網頁製作方法 3. 軟體開發和運行維護基礎知識 3.1 軟體工程和項目管理基礎知識 軟體工程基本概念 軟體開發各階段的目標和任務 軟體過程基本知識 軟體工程項目管理基本知識 面向對象開發方法基礎知識 軟體開發工具與環境基礎知識(CASE) 軟體質量管理基礎知識 3.2 軟體需求分析、需求定義及軟體基礎知識 結構化分析概念(數據流圖(DFD)、實體關系圖(ER)) 面向對象設計、結構化設計基礎知識 模擬設計、代碼設計、人機界面設計要點 3.3 程序設計基礎知識 結構設計程序設計,程序流程圖,NS圖,PAD圖 程序設計風格 面向對象設計基礎知識、可視化程序設計基礎知識 3.4 程序測試基礎知識 黑盒測試、白盒測試、灰盒測試基礎知識 測試工作流程 3.5 軟體開發文檔基礎知識 3.6 軟體運行和維護基礎知識 軟體運行基礎知識 軟體維護基礎知識 4. 安全性基礎知識 安全性基本概念 計算機病毒的防治,計算機犯罪的防範 訪問控制 加密與解密基礎知識 5. 標准化基礎知識 標准化基本概念 國際標准、國家標准、行業標准、企業標准基礎知識 代碼標准、文件格式標准、安全標准、軟體開發規范和文檔標准基礎知識 標准化機構 6. 信息化基本知識 信息化基本概念 全球信息化趨勢,國家信息化戰略,企業信息化戰略和策略常識 有關的法律、法規要點 過程教育、電子商務、電子政務等常識 企業信息資源管理常識 7. 計算機專業英語 掌握計算機技術的基本詞彙 能正確閱讀和理解本領域的簡單英文資料 考試科目2:程序設計 1. 內部設計 1.1 理解外部設計 1.2 功能劃分和確定結構 數據流圖、結構圖 1.3 物理數據設計 確定數據組織方式、存儲介質,設計記錄格式和處理方式 1.4 詳細輸入輸出設計 界面設計、報表設計 1.5 內部設計文檔 對程序介面、程序功能、人機界面、輸入輸出、測試計劃的描述 1.6 內部設計文檔 2. 程序設計 2.1 模擬劃分(原則、方法、標准) 2.2 編寫程序設計文檔 模塊規格說明書(程序處理邏輯的描述、輸入輸出數據格式的描述) 測試要求說明書(測試類型和目標、測試用例、測試方法) 2.3 程序設計評審 3. 程序實現 3.1 編程 編程方法和標准 程序設計語言的使用 人工檢查 程序文檔化 3.2 程序測試 准備測試環境和測試工具 准備測試數據 寫出測試報告 4.程序設計語言(C語言為必選,其他語言可以任選一種) 4.1 C程序設計語言(ANSI C標准) 程序結構,語法,數據類型說明,可執行語句,函數調用,標准庫函數,指針 4.2 C++程序設計語言(ANSI C++標准) C++和面向對象程序設計,語法和程序結構,類、成員、構造函數、析構函數、模板、繼承、多態 4.3 Java程序設計(Java 2) Java和面向對象程序設計 語言機制(程序結構和語法,類、成員、構造函數、析構函數、繼承、介面) 4.4 Visual Basic程序設計(Visual Basic 6.0) 用戶界面設計 程序結構和語法 文件系統對象 訪問資料庫

② 簡述JAVA程序的編輯編譯和運行過程

Java應用程序的開發周期包括編譯、下載、解釋和執行幾個部分。Java編譯程序將 Java源程序翻譯為JVM可執行代碼--位元組碼。Java將符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查 表來確定一個方法所在的地址。這樣就有效的保證了Java的可移植性和安全性。

運行JVM位元組碼的工作是由解釋器( java命令 )來完成的。解釋執行過程分三部進行:代碼的裝入、代碼的校驗和代碼的執行。裝入代碼的工作由"類裝載器"(class loader)完成。類裝載器負責裝入運行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被其調用的類。當類裝載器裝入一個類時,該類被放 在自己的名字空間中。除了通過符號引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本台計算機上的所有類都在同一地址空間內,而所有從外 部引進的類,都有一個自己獨立的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運行效率,同時又保證它們與從外部引進的類不會相互影響。當裝入 了運行程序需要的所有類後,解釋器便可確定整個可執行程序的內存布局。解釋器為符號引用同特定的地址空間建立對應關系及查詢表。通過在這一階段確定代碼的 內存布局,Java很好地解決了由超類改變而使子類崩潰的問題,同時也防止了代碼對地址的非法訪問。

③ checksum這個校驗的文件咋用

校驗和(Checksum)

PE的可選映像頭(IMAGE_OPTION_HEADER)裡面,有一個Checksum欄位,是該文件的校驗和,一般EXE文件可以使0,但一些重要的和系統DLL及驅動文件必須有一個校驗和.

Windows 提供了一個API函數MapFileAndCheckSum 測試文件的Checksum,它位於IMAGEHLP.DLL鏈接庫里,其原型:

ULONG MapFileAndCheckSum

{

LPSTR FileName, // 文件名

LPDWORD HeaderSum, // 指向PE文件頭的CheckSum

LPDWORD new_checksum // 指向新計算出的Checksum

}

程序一旦運行後,new_checksum 地址處將放當前的文件的校驗和,old_checksum地址指向PE文件的checksum欄位

安全的方法是將此值放在注冊表裡,需要時比較.

內存映像校驗

磁碟文件完整性校驗可以抵抗解密者直接修改文件,但對內存補丁卻沒有效果,必須對內存關鍵的代碼進行校驗.

1 對整個代碼進行校驗

每個程序至少有一個代碼區塊和數據區塊,數據區塊屬性可讀寫,程序運行時全局變數通常會放在這里,這些數據會動態變化,因此校驗這部分是沒什麼意義,而代碼段只讀,存放的是程序代碼,在程序中數據數不會變的,因此用這部分進行內存校驗是可行的.

具體實現方法:

(1) 從內存中映像中得到PE相關數據,如代碼塊的RVA和內存大小

(2) 根據得到代碼區塊的RVA值和內存大小,計算出內存數據的CRC-32值

(3) 讀取自身文件先前存儲的CRC-32值(PE文件頭前一個欄位),這個值是通過軟體寫進去的.

(4) 比較兩個CRC-32值.

這樣比較內存的代碼段校驗,只要內存的數據被修改,就能發現。

BOOL CodeSectionCRC32()

{

PIMAGE_DOS_HEADER pDosHeader = NULL;

PIMAGE_NT_HEADERS pNTHeader = NULL;

PIMAGE_SECTION_HEADER pSection = NULL;

DWORD ImageBase,OriginalCRC32;

ImageBase = (DWORD)GetMoleHandle(NULL); // 取基址

pDosHeader = (PIMAGE_DOS_HEADER)ImageBase;

pNtHeader = (PIMAGE_NT_HEADER32)((DWORD)pDosHeader + pDosHeader -> e_lfanew);

// 定位到PE文件頭前4個位元組值,並讀取存儲在這里的CRC -32值

OriginalCRC32 = *((DWORD*)(DWORD)pNtHeader - 4);

pSecHeader = IMAGE_FIRST_SECTION(pNtHeader); // 得到第一個區塊的地址

//假設第一個區塊就是代碼區塊

if(OriginalCRC32 == CRC32((BYTE*)ImageBase + pSecHeader -> VirtualAddress)

// 為了方便加殼

// 上一句也可為if(OriginalCRC32 == CRC32((BYTE *)0x401000, 0x36AE)

return TRUE;

else

return FALSE;

}

熱點內容
高訪問網址 發布:2024-11-23 09:53:02 瀏覽:519
android內置apk 發布:2024-11-23 09:46:18 瀏覽:319
郵箱伺服器搭建windows 發布:2024-11-23 09:44:46 瀏覽:559
安卓如何強制關閉 發布:2024-11-23 09:43:05 瀏覽:447
linux怎麼安裝samba伺服器 發布:2024-11-23 09:42:26 瀏覽:427
php開源建站 發布:2024-11-23 09:33:57 瀏覽:44
醫工院資料庫 發布:2024-11-23 09:29:26 瀏覽:360
金稅盤安全接入伺服器地址 發布:2024-11-23 09:18:00 瀏覽:24
超星腳本題庫 發布:2024-11-23 09:14:34 瀏覽:901
如何讓sql 發布:2024-11-23 09:08:33 瀏覽:986