对于需要做某些事情的程序来说,新型CPU带来的DEP(数据执行保护)是一个噩梦。
以往,我们可以new一块内存,把代码(编译好的或者是手工构造的)复制进去,然后可以用指针直接从那块内存的开始来运行(其实就是改一下EIP……)。
可是CPU有了DEP则不同,从SoftICE里面可以看到,当执行到那块内存的第一条指令的时候,硬件异常出现了……程序无条件跳转到系统异常处理过程,Win32 GetLastError 返回14007(在活动的激活上下文中没有找到任何查找密钥。)
-.-凸 微软给的这叫什么提示……
如何解决呢,其实很简单,十分的简单,超级的简单!
DWORD dwOldProtect;
VirtualProtect( m_pMem, dwMemSize, PAGE_EXECUTE_READWRITE, &dwOldProtect);
VirtualProtect( m_pMem, dwMemSize, PAGE_EXECUTE_READWRITE, &dwOldProtect);
世界清静了……