2013-03-22 63 views
3

我们有一个应用程序,其中一部分堆作为汇编指令执行/用于测试目的 - 我们下载程序到PLC,但允许用户在下载到PLC之前通过执行代码来模拟运行其应用程序。在我们总是从存储指令的堆中执行这些程序之前,这个程序运行良好,但现在我们已经转换为VS2012,现在看起来关闭DEP并不容易。我想知道是否可以关闭DEP而不管GetProcessDEPPolicy返回什么或者是否有其他技术从堆执行汇编指令而不涉及DEP?如何禁用DEP

+0

不,这不是病毒:-) – 2013-03-22 23:51:04

+1

很长时间以来这是不可能的。你从什么升级?请注意HeapCreate()winapi函数的HEAP_CREATE_ENABLE_EXECUTE选项。不,你不能在VS2012中改变它,它现在从默认进程堆中分配。你需要使用VirtualAlloc()来分配具有正确保护标志的内存。听起来像我工作btw旧项目;) – 2013-03-23 01:19:51

回答

6

您不想禁用DEP;你想修改你的应用程序以在其中工作。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366553%28v=vs.85%29.aspx

If your application must run code from a memory page, it must allocate and set the proper 
virtual memory protection attributes. The allocated memory must be marked PAGE_EXECUTE, 
PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, or PAGE_EXECUTE_WRITECOPY when allocating memory. 

遵循这些简单的方向和你的代码可以与DEP共存。

+0

谢谢,我会尝试。 – 2013-03-23 18:36:57