這章純基礎知識,四塊內容:文字字元、windows作業系統、保護模式和pe格式。
文字字元是介紹了下ascii和unicode字符集,然後windows作業系統介紹了下windows下的一些常用api(後面逆向常會遇到,熟悉引數列表及函式功能)和術語(控制代碼)及訊息機制等。保護模式和pe檔案格式做了個粗略的介紹。
一、文字字元
首先,有大小端規則來說明多位元組資料的存放順序:
常見的intel體系晶元使用的編碼屬於小端規則,某些risc架構的cpu,如ibm的power-pc等屬於大端規則。
這本書作者的講解是基於intelx86上的windows平台的,所以都是小端規則。
ascii和unicode字符集,這個,繼續維基百科:
ascii:「ascii(pronunciation: /ˈæski/ ass-kee[1],american standard code for information interchange,美國資訊交換標準程式碼)是基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語,而其擴充套件版本eascii則可以勉強顯示其他西歐語言。它是現今最通用的單位元組編碼系統(但是有被unicode追上的跡象),並等同於國際標準iso/iec 646。」
unicode:「unicode(統一碼、萬國碼、單一碼、標準萬國碼)是電腦科學領域裡的一項業界標準。它對世界上大部分的文字系統進行了整理、編碼,使得電腦可以用更為簡化地方式來呈現和處理文字。」
這樣大概可以區別出來了,乙個是主要顯示現代英文,另乙個是整合了其它文字系統(國際化必須)。另外,實現方面,乙個7位,另乙個16位。
二、windows作業系統
winapi方面,介紹歷史:
用於16位版本windows的api(windows1.0到windows3.1)現在稱作win16。
用於32位版本windows的api(windows9x/nt/2000/xp/2003)現在稱作win32。
所有32位版本的windows都支援win16api(和舊應用程式相容),不過windows nt/2000/xp和windows 9x的工作方式不同。
在windows nt/2000/xp上,win16函式呼叫通過乙個轉換層被轉化為win32函式呼叫,然後被作業系統處理(實際呼叫win32,wow)。
而在windows 9x上,是由win16函式支援的,既是win32函式實際上是通過呼叫win16函式實現的。
kernel(由16位的krnel386.dll和32位的kernel32.dll實現):作業系統核心功能服務,包括程序和執行緒控制、記憶體管理和檔案訪問等。
user(由16位的user.dll和32位的user32.dll實現):負責處理使用者介面,包括鍵盤和滑鼠輸入、視窗和選單管理等。
gdi(由16位的gdi.dll和32位的gdi32.dll實現):圖形裝置介面、允許程式在螢幕和印表機上顯示文字和圖形。
除上述模組外,還提供其它功能模組。
(windows 9x是乙個16位和32位的混合體,因此系統需要載入16位和32位的dll;而windows nt/2000/xp是乙個純32位系統,並沒有載入16位的dll,不過還是保留在了system32目錄下。現在win64下還有個syswow64目錄。)
接著,需要知道一些常用winapi。
hmemcpy、getwindowstext……
還有控制代碼。應用程式中需要向系統申請一些物件,系統就會返回這些物件的控制代碼,通過這些控制代碼,程序可以操控物件。(不同程序同一物件控制代碼可能不同,意思是不能亂共享,需要正確方法。)
windows 9x幾乎都是使用ansi字串來進行所有的內部操作的。而新架構上,從頭到尾都用unicode進行開發,系統核心是用unicode函式工作的。而ansi版本,則需要通過乙個轉換層來呼叫unicode版本的函式。(會進行些額外的操作,從而占用更多的記憶體和cpu資源。)
windows訊息機制,記住windows是訊息驅動型的系統就ok了。windows系統中有兩種訊息佇列:一種是系統訊息佇列,另乙個中是應用程式訊息佇列。當乙個事件發生時,先進系統訊息佇列,然後再拷貝到各應用程式訊息佇列。
三、保護模式
保護模式下的許可權級別,在保護模式下,所有的應用程式都有許可權級別(pl),從0到3有4等,其中0最高,3最低。作業系統的核心層是執行在ring0級的,而win32子系統(如kernel32.dll、user32.dll)是執行在ring3級的,以提供與應用程式的介面。
四、認識pe格式
windows的可執行檔案(exe,dll)是pe(portable executable )格式。
pe檔案使用的是乙個平面位址空間,所有的**和資料都被合併在一起,組成乙個很大的結構。檔案的內容被分割為不同的區塊(section,區段、節),塊中包含**或資料。每個塊都有它自己在記憶體中的一套屬性(是否包含**,是否唯讀……)。
每個區塊都有不同的名字,這個名字用來表示區塊的功能。常見的塊的含義:
*.text:是在編譯或彙編結束時產生的一種塊,它的內容全是指令**;
*.rdata:是執行期唯讀資料;
*.data:是初始化的資料塊;
*.idata:包含其他外來dll的函式及資料資訊,既輸入表;
*.rsrc:包含模組的全部資源,如圖示、選單、點陣圖等。
pe檔案非常好的乙個地方就是在磁碟上的資料結構與在記憶體中的結構是一致的。裝載乙個可執行檔案到記憶體中主要就是講乙個pe檔案的某一部分對映到位址空間中。這樣,pe檔案的資料結構在磁碟和記憶體中的是一樣的。
3、虛擬位址(virtual address,va):由於windows程式執行在386保護模式下,所以程式訪問儲存器所使用的邏輯位址成為虛擬位址,又稱為記憶體偏移位址。與實位址模式下的分段位址類似。
4、基位址(imagebase):檔案執行時被對映到指定記憶體中,這個初始位址稱為基位址(imagebase)。這個值是由pe檔案本省設定的。按照預設設定,用vc建立的exe檔案基位址是0040000h,dll檔案基位址是10000000h。但是,可以在建立應用程式的exe檔案時改變這個位址。
《加密與解密》(第三版) 1 基礎知識 小結
這章純基礎知識,四塊內容 文字字元 windows作業系統 保護模式和pe格式。文字字元是介紹了下ascii和unicode字符集,然後windows作業系統介紹了下windows下的一些常用api 後面逆向常會遇到,熟悉引數列表及函式功能 和術語 控制代碼 及訊息機制等。保護模式和pe檔案格式做了...
《演算法導論》第三版勘誤與建議
1 第45頁底部,我們用常數次矩陣乘法的代價減少了一次矩陣乘法 應該改為 我們用常數次矩陣加法的代價減少了一次矩陣乘法 2 第56頁,式 4.21 容易引起歧義,改為下式更為恰當 第57頁和58頁的相關公式與之相同。1 第88頁第二行,高度為h的堆最多包含 1 第135頁,物件的分配與釋放 小節中的...
Python基礎教程(第三版)讀書筆記(1)
import math 引入math模組 from math import sqrt 引入math模組的函式sqrt本章學習到的新函式 函式描述 abs number 返回指定數的絕對值 bytes string,encoding errors 對指定的字串進行編碼,並以指定的方式處理錯誤 cmat...