C 如何在另一个.exe程序中复制.exe程序的函数

C 如何在另一个.exe程序中复制.exe程序的函数,c,exe,C,Exe,我有一个可执行文件,我喜欢在运行程序时将这个可执行文件的函数放在另一个可执行文件中 PS:可执行文件是用C语言编程的,这取决于函数的功能。 如果程序中有任何绝对地址,则需要修复它们。所以首先要确保代码是可重定位的,这在C语言中可能是不可能的。您需要查看汇编级别 例如: .text push mystr call puts .data mystr: dd "Hello world" 由于mystr将位于可执行文件的另一个部分,因此它不可重新定位,因此push将推送

我有一个可执行文件,我喜欢在运行程序时将这个可执行文件的函数放在另一个可执行文件中
PS:可执行文件是用C语言编程的,这取决于函数的功能。 如果程序中有任何绝对地址,则需要修复它们。所以首先要确保代码是可重定位的,这在C语言中可能是不可能的。您需要查看汇编级别

例如:

.text
    push mystr
    call puts

.data
mystr:
    dd   "Hello world" 
由于mystr将位于可执行文件的另一个部分,因此它不可重新定位,因此push将推送一个绝对地址。您需要将其更正到正确的地址。此外,对看跌期权的调用将具有看跌期权的绝对地址

根据您尝试这样做的原因,有不同的解决方案。如果您只想重用相同的代码,请将其移动到动态链接的库中。如果您想以某种方式将其注入加载的图像,那么您可能正在做一些非常奇怪的事情。这通常只在劫持其他人进程的攻击中完成。如果出于某种原因想这样做,那么需要编写可重定位代码。例如,上面代码段中的字符串引用可以如下所示进行修复:

.text
    call hereiam
hereiam:
    pop eax
    add eax, mystr - hereami
    push eax
    ...

mystr:
    dd    "Hello world"

这将在运行时计算字符串的位置。然而,要将其注入到正在运行的程序中,您仍然存在一个问题,即所有现代操作系统都有w^x保护。w^x保护意味着程序使用的所有内存只能被写入或执行,而不能同时被写入或执行。因此,无论您在哪里编写代码,它都无法执行。这是一种防止黑客劫持进程的保护措施(尽管实际上并不起作用)。

请添加更多详细信息,您是否拥有这两个程序的代码,是否能够重建它们?这个函数在库中吗?第一个exe使用的是什么?