我正在尋找一種用於存儲進程內存的方法,並在稍後在特定條件下進行恢復。用於恢復狀態的運行時進程內存修補程序
...
它其實我讀過的問題......這似乎是一個很大的挑戰!因此,讓我們來分析一下:應用程序是分佈式應用程序,但許多進程是無狀態的(向中央服務器請求其狀態)。進程使用網絡連接和共享內存與其他進程進行通信。
中央服務器應通過轉儲其進程內存來保存其狀態,該進程內存應在稍後的一定條件下恢復。 (1)
我知道約ReadProcessMemory和WriteProcessMemory功能,它允許進程自己讀取並覆蓋已分配的內存,不是嗎? 所以,我需要的是我開始讀/寫的地址,以及要讀/寫的字節數。所以... 什麼地址?我讀過的許多代碼使用VirtualAlloc返回的地址,但我不知道這對我是否有用。
我假定進程可執行段沒有改變,所以他們不需要紅色/書寫。 在還原時,我還可以假設當主線程讀取內存時,所有進程線程都處於相同的執行位置。
它仍然棧內存,堆內存,其內存段正是我感興趣的
這可能嗎?
(1)問爲什麼我試圖這樣做是完全合法的。原因是...像往常一樣複雜。但是,假設應用程序有一個非常複雜的狀態,那就需要一個太複雜的狀態保存算法。另一個備選方案(這是分析的主題)是記錄器/重放機制的實現,該機制能夠重現造成修改狀態的每個事件。
它來到我的腦海裏malloc & co. hook。所以我可以跟蹤進程分配的內存。但實際上我注意到了_CrtMemState結構,但我不知道它對我是否有用。
很好的例子。它確實有效,但對於非常有限的情況。謝謝! – Luca 2010-08-03 16:23:20
這就像Linux中的cat/proc/pid/maps''一樣,除了這個代碼你不知道每塊內存屬於哪個模塊。有可能以某種方式獲得這些信息嗎? – alexandernst 2014-01-30 12:05:31
嗯,我剛剛發現該怎麼做:)'''GetModuleFileNameA((HINSTANCE)mbi.AllocationBase,szModName,_countof(szModName));''' – alexandernst 2014-01-30 13:11:04