如何在内存中运行一些代码?

Beh*_*ooz 2 .net c# jit unmanaged dynamic-execution

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

byte[] a:  
01010101 10111010 00111010 10101011 ...
Run Code Online (Sandbox Code Playgroud)

hom*_*tar 7

关键是将可执行代码放入使用VirtualAlloc分配的内存块中,以便将缓冲区标记为可执行文件.

IntPtr pExecutableBuffer = VirtualAlloc(
  IntPtr.Zero,
  new IntPtr(byteCount),
  AllocationType.MEM_COMMIT | AllocationType.MEM_RESERVE,
  MemoryProtection.PAGE_EXECUTE_READWRITE);
Run Code Online (Sandbox Code Playgroud)

(然后使用VirtualFree自行清理).

这告诉Windows应该将内存标记为可执行代码,以便它不会触发DEP检查.