如何运行在内存中的一些代码?
-
20-09-2019 - |
题
我有一个编译器,编译汇编语言机器语言(在存储器中)。 我的项目是在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白名单,但也并非完全没有管理权限 - 这不符合该安全功能的目的
。不隶属于 StackOverflow