首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在内存中运行一些代码?

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

Stack Overflow用户
提问于 2009-10-11 18:23:12
回答 4查看 782关注 0票数 2

我有一个编译器,可以把汇编语言编译成机器语言(在内存中)。我的项目在C# .net中。有没有办法在线程上运行内存?环境保护局如何预防呢?

代码语言:javascript
复制
byte[] a:  
01010101 10111010 00111010 10101011 ...
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-11 18:36:15

我怀疑是否有一种被支持的方法。我不知道,也没有研究过它,但这里有一些猜测:

最简单的方法可能是将其作为进程启动:将其写入*.com file,然后告诉O/S运行该可执行文件。

或者,将内存作为参数传递给CreateThread function (但您需要修改代码是否具有正确的调用约定、期望指定的参数、保留寄存器以及位于可执行的内存中)。

另一种可能性是将操作码写入已知将被执行的存储器中(例如,覆盖最近加载的DLL中的现有代码)。

票数 3
EN

Stack Overflow用户

发布于 2009-10-11 21:08:03

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

代码语言:javascript
复制
IntPtr pExecutableBuffer = VirtualAlloc(
  IntPtr.Zero,
  new IntPtr(byteCount),
  AllocationType.MEM_COMMIT | AllocationType.MEM_RESERVE,
  MemoryProtection.PAGE_EXECUTE_READWRITE);

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

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

票数 8
EN

Stack Overflow用户

发布于 2009-10-11 18:58:20

可以将字节作为代码执行:

Inline x86 ASM in C#

它确实需要使用unsafe代码。

我认为这只是一个有趣的事实,但在实践中无用,但也许您的应用程序实际上对此有用处:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1551359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档