我有一个编译器,编译汇编语言机器语言(在存储器中)。 我的项目是在C#.NET。 有什么办法上运行一个线程内存? 如何防止DEP它?

byte[] a:  
01010101 10111010 00111010 10101011 ...
有帮助吗?

解决方案

我怀疑有一个支持的方式。我不知道,也没有研究,但这里有一些猜测:

最简单的方法可能是启动它作为一个过程:记录到一个 * .com文件然后告诉O / S来运行可执行文件。

可替换地,通过存储作为参数到 CreateThread功能(但你需要wrorry大约具有调用约定,期望指定的参数,保存寄存器,并在内存中是可执行是右边的代码)。

另一种可能性是操作码写入到存储器,它是知道已经将要被执行(例如,覆盖在新近加载DLL现有代码)。

其他提示

的关键是把可执行代码与这样的VirtualAlloc分配的内存块,该缓冲器被标记为可执行的。

IntPtr pExecutableBuffer = VirtualAlloc(
  IntPtr.Zero,
  new IntPtr(byteCount),
  AllocationType.MEM_COMMIT | AllocationType.MEM_RESERVE,
  MemoryProtection.PAGE_EXECUTE_READWRITE);

(然后使用VirtualFree后自己清理)。

这告诉Windows存储器应该被标记为可执行的代码,以便它不会触发一个DEP检查。

您可以从白名单控制面板应用程序 http://ask-leo.com/how_do_i_turn_off_data_execution_prevention_errors.html

我怀疑你可以programattically白名单,但也并非完全没有管理权限 - 这不符合该安全功能的目的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top