【发布时间】:2018-07-29 21:53:35
【问题描述】:
我想知道是否可以执行根本不在主程序中的代码,如果可以,您将如何去做?如果不能用c完成,可以用c++完成吗?
我认为如果将二进制文件导入堆中,将指针移动到寄存器 int,然后尝试预测寄存器并调用指针,这可能是可能的,但我真的没有备用电脑尝试此操作,以防出现问题。
【问题讨论】:
-
是的,有可能。您需要做的就是调用一个函数,其中指针指向任意代码而不是实际函数的指令。
-
所以你会做一个模板函数,然后将函数指针等同于另一个位置?
-
请注意,您执行的任何代码都需要相当“简单”,因为大多数代码都希望加载到特定的内存地址而不是任意定位的数组。您可以将代码编译为与位置无关 (-PIC),但仍然存在涉及修补 GOT 和 PLT 的其他问题。
-
最简单的方法之一可能是让程序编译所需的代码(通过调用 C 编译器),将其链接到动态库中,然后调用动态库中的例程。这样做的好处是使用现有工具来创建动态链接代码,而不是尝试实现您自己的。当然,它会依赖于实现-系统-版本-一切。
-
关于“我真的没有备用电脑来尝试这个,以防出现问题”:你不会用软件破坏你的硬件。您不会通过在非特权帐户中运行软件来破坏您的操作系统安装。 (如果您不定期登录系统上的非特权帐户,请创建一个。[当前零售 Microsoft Windows 是否支持该功能?我已经有一段时间没有使用它了。])
标签: c heap-memory metaprogramming