对WINDOWS程序内存管理模型有很好地把握。
个人认为程序还有以下待改进之处:
程序虽然对WINDOWS程序内存空间划分比较清晰,但对各组成成分显然不太清楚,而只是采用了暴力搜索方式。
for(; dwBase < 2*dwOneGB-3; dwBase += dwOnePage)并根据能否读成功来确定页属性。
if(!::ReadProcessMemory(m_hProcess, (LPVOID)dwBaseAddr, arBytes, dwOnePage, NULL)) // if(!::ReadProcessMemory(m_hProcess, (LPVOID)dwBaseAddr, arBytes, dwOnePage+3, NULL)) return FALSE; // 此页不可读
为什莫不直接在开始读之前对页属性进行分析哪?如带有可执行属性的页直接跳过就行了(代码)。只读属性的也同样(资源、导入表、常量区)。只对数据区、堆栈进行读取比较即可。这样可大大节省读取分析时间(游戏越大越明显)。
以上纯属个人看法,谬误之处欢迎指正。