我有一个可执行文件,我喜欢在运行程序时将此可执行文件的函数放在另一个可执行文件中 PS:可执行文件用C语言编程
答案 0 :(得分:1)
这取决于你的功能。 如果您的程序中有任何绝对地址,那么您需要修复它们。因此,首先要确保您的代码是可重定位的,这在C中可能是不可能的。您需要查看汇编级别。
一个例子:
.text
push mystr
call puts
.data
mystr:
dd "Hello world"
这将不可重定位,因为mystr将位于可执行文件的另一部分中,因此push会推送一个绝对地址。您需要将其更正为正确的地址。对puts的调用也将具有puts的绝对地址。
根据您尝试执行此操作的原因,有不同的解决方案。如果您只想重用相同的代码,请将其移动到动态链接的库中。如果你想以某种方式将它注入加载的图像,那么你可能正在做一些非常奇怪的事情。这通常只能在劫持其他人的进程的攻击中完成。如果您出于某种原因想要这样做,那么您需要编写可重定位代码。例如,上面代码段中的字符串引用可以像这样修复:
.text
call hereiam
hereiam:
pop eax
add eax, mystr - hereami
push eax
...
mystr:
dd "Hello world"
这计算字符串在运行时的位置。但是,要将其注入正在运行的程序中,您仍然遇到问题,即所有现代操作系统都具有w ^ x保护。 w ^ x保护意味着程序使用的所有内存只能写入或执行,而不能同时写入或执行。因此,无论您何时编写该代码,都无法执行。这是对黑客劫持进程的保护(虽然它实际上不起作用)。