2011-10-09 44 views
0

是否可以为包含函数的字节数组分配虚拟内存,将数组写入内存,然后以某种方式在虚拟内存中执行函数?函数在BYTE数组中直接记忆?

+0

“包含函数的字节数组”是一个过于宽泛的规范。什么表示?什么操作系统?什么硬件架构?没有重大的澄清,你的问题就不能得到回答。 –

+0

任何特定的编程语言? – GolezTrol

+0

C++。视窗。表示形式是机器代码(或者有效的代码)。 x86和x86-64 – replicant

回答

0

你必须确保你要执行的字节确实是一个有效的CPU指令序列,否则“函数”肯定会崩溃,比如导致异常“非法指令”,“访问冲突”等。

接下来要做的是确保有问题的字节位于具有执行权限的记忆。 VirtualProtectPAGE_EXECUTE让你。

然后你实际上将控制权交给你的功能。这可以是汇编代码,例如push <address>; ret;或C++风格的静态函数调用,地址在变量中。

+0

你能否解释一下我将如何使用包含地址的指针的静态函数来调用它? – replicant

+0

类似于您如何通过GetProcAddress API获取函数地址并将其转换为您需要的类型。在你的情况下,这个函数入口点就是你的数据数组。 –

+0

我会在hModule参数中使用什么?当前进程的句柄? – replicant