在程序中避免DEP

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

About HyperIris

Wild Scientist
此条目发表在编程艺术分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s