我有一个编译器,可以把汇编语言编译成机器语言(在内存中)。我的项目在C# .net中。有没有办法在线程上运行内存?环境保护局如何预防呢?
byte[] a:
01010101 10111010 00111010 10101011 ...发布于 2009-10-11 18:36:15
我怀疑是否有一种被支持的方法。我不知道,也没有研究过它,但这里有一些猜测:
最简单的方法可能是将其作为进程启动:将其写入*.com file,然后告诉O/S运行该可执行文件。
或者,将内存作为参数传递给CreateThread function (但您需要修改代码是否具有正确的调用约定、期望指定的参数、保留寄存器以及位于可执行的内存中)。
另一种可能性是将操作码写入已知将被执行的存储器中(例如,覆盖最近加载的DLL中的现有代码)。
发布于 2009-10-11 21:08:03
关键是将可执行代码放入使用VirtualAlloc分配的内存块中,以便将缓冲区标记为可执行。
IntPtr pExecutableBuffer = VirtualAlloc(
IntPtr.Zero,
new IntPtr(byteCount),
AllocationType.MEM_COMMIT | AllocationType.MEM_RESERVE,
MemoryProtection.PAGE_EXECUTE_READWRITE);(然后使用VirtualFree自己清理)。
这告诉Windows应该将内存标记为可执行代码,这样它就不会触发DEP检查。
发布于 2009-10-11 18:58:20
可以将字节作为代码执行:
Inline x86 ASM in C#
它确实需要使用unsafe代码。
我认为这只是一个有趣的事实,但在实践中无用,但也许您的应用程序实际上对此有用处:)
https://stackoverflow.com/questions/1551359
复制相似问题