我可以在堆上分配一个块,将其字节设置为与函数调用及其参数相对应的值,然后使用函数调用和取消引用运算符执行该序列吗?
最佳答案
因此,如果我没看错,您想在堆上动态创建CPU组装指令并执行它们。有点像自修改代码。从理论上讲这是可能的,但实际上可能没有。
问题在于,堆位于数据段中,并且当今的CPU /操作系统已采取措施完全防止这种行为(对于x86 CPU,它称为NX位或No-eXecute位)。如果一个段被标记为NX,则无法从中执行代码。发明这种方法是为了阻止计算机病毒使用缓冲区溢出将可执行代码放置在数据/堆/堆栈存储器中,然后尝试调用程序执行此类代码。
请注意,在代码段中加载了DLL和库,这当然允许代码执行。
关于c++ - 从堆执行指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55023184/