製作外掛,最需要理解掌握的就是記憶體。
<虛擬記憶體>
軟體執行後,會用到很多的資料,軟體本身有一些DLL的代碼,
資源資料都是被裝載在該程式的進程空間的虛擬記憶體中,
同時軟體對於一些資料處理後的結果等也是在記憶體堛.
虛擬記憶體實際上也是在硬碟上的,作業系統會根據當前正需要處理到需要的資料時,再把這些資料裝入實體記憶體中進行操作。
操作完後,再存回到虛 擬記憶體中。
使用這種方式,可以在有限的實體記憶體電腦上運行體積超過實體記憶體的那些遊戲或其他軟體,
通過監視,修改記憶體,就能達到修改遊戲中的各種資料,或 獲取各種資料.
<記憶體位址>
記憶體位址也稱記憶體指標 .軟體在初始化運行時,
作業系統為會該軟體的進程分配4GB的虛擬記憶體空間用來存放資料.
在這麼大的一個虛擬記憶體中,是用記憶體指標來進行定位的,
可以通過記憶體指標所指向的記憶體位址方便的找到虛擬記憶體中需要的資料
<模組控制碼>
這堛獐珩晙O指在被裝入虛擬記憶體中的一些檔,如那個執行程式EXE檔或其他的一些DLL檔,
這些檔在這個進程的虛擬內中的記憶體位址也是模組控制碼相同的
<變數指標>
高級編程語言堻ㄛO通過變數來管理軟體運行時記憶體中的變數資料,
並不直接提供這個變數在虛擬記憶體中居體的位置,這塈畯怚i以使用一些手段,
得到一個變數在虛擬記憶體中的位置,可以把這個位置稱為變數指標
<副程式指標>
在程式碼中編寫的副程式,在軟體運行時裝入虛擬記憶體後,
該副程式的第一條指令處所在的虛擬記憶體位址,
也被稱為副程式指標.通過下中斷點在副程式指標,可以分析出其參數與返回值和他的功能...
更重要的是可以自已編寫CALL代碼,調用它,從而能實現自動化功能.
<記憶體偏移量>
簡稱偏移量或記憶體偏移等.偏移量是相對于原一個記憶體位址而言,
一個記憶體位址+偏移量=另一個記憶體位址,
如有兩個記憶體位址分別是 65560 與 65800 計算 65800-65560=240
這堛240就是偏移量,因為它並不是一個直接指向某處記憶體的記憶體位址,
它需要與一個記憶體進行進行相加而得到另一個記憶體位址如 65560 + 240 = 65800
即 記憶體位址 + 偏移量 = 另一個記憶體位址 或 65800 - 240 = 65560 即 記憶體位址 - 偏移量 = 另一個記憶體位址
上面的(記憶體指標,變數指標,副程式指標,模組控制碼)指的都是記憶體中的某處位址,即記憶體位址,
該位址是一個佔用4位元組長(4位元組=32位元)的正整數型數值
在記憶體操作堙A要注重的是某項資料在記憶體中的長度。一般常見的長度可以參考下面的
1GB = 1024MB
1MB = 1024KB
1KB = 1024位元組
1位元組 = 8位元
上面是一些常見的資料間的進位元長度
在高階語言堥瓣讓我們直接對記憶體中的資料以這樣的長度進行管理,
而是直接使用資料類型進行管理與組織,常見的一些資料類型在記憶體中所占的長度可以見下面
位元組型 = 1位元組 = 8位元
短整數型 = 2位元組 = 16位元
整數型 = 4位元組 = 32位元
長整數型 = 8位元組 = 64位元
雙精度小數型 = 8位元組 = 64位元
文本型 通常沒有固定的長度,是以位元組 0 為結尾
位元組集型 通常也沒有固定的長度,長度由軟體自動管理
也有些自定義的資料類型與陣列變數在記憶體中的佔用長度是按每個成員的資料類型長度加起來的
座標型 = 8位元組 = 64位元 是由兩個整數型變數橫與縱所組成的
動態的整數型陣列變數將是這個變數的每成員4位元組乘以這個動態陣列的陣列成員數
上面介紹了一些術語,與一些常見的資料類型變數在記憶體中佔用的長度
下面提供一個例子,該例子可以取出易語言聲明的變數在運行時所處在的記憶體位址.
在外掛作坊模組中有取得易語言基本資料類型變數指標的所有函數
下面再介紹一個記憶體工具 Cheat Engine 簡稱 CE 或 CT .這個軟體可是非常的強大,
用來分析遊戲中的記憶體真的是個利器.大家可以在本站下載到 CE5.4中英文版
雙擊運行 CE中文版.exe ,也可以運行練習程式,照堶悸獄〝來練習CE的用法.
打開指定的程式進程
手動添加位址 添加進例子EXE媗膆靰漕煽X個變數位址,並且選擇對應的資料型,
會在下方顯示出這幾處記憶體堛爾禤ぉ
通過本例,
應該能清楚了記憶體位址的重要.可以通過記憶體位址讀取目標進程堛爾禤,
當然也可以修改目標進程堛爾禤.
CE的記憶體查找功能很好用,並且對動態記憶體有特效.以下的教材會深入講解. |