在 C++ 中更改函数 return 的值(在运行时)

Changing function return value in C++ (In runtime)

我想更改外部函数(在运行时)的 return 值,它位于程序启动时加载的另一个 dll 中。

我想做的实际例子:

dll中的函数:

int numberOfMoney() {
   return 0;
}

我的主程序:

    HMODULE handle = LoadLibraryA("/myDll.dll");

    auto gotFunc = GetProcAddress(handle, "numberOfMoney");
    // making numberOfMoney returning 1000 ???

有谁知道我该怎么做?也许没有外部库?谢谢!

您可以通过挂钩在运行时更改函数或函数的 return。挂钩函数有几种不同的技术。最常见的称为热补丁,它在 x86 中使用到中间件函数的相对跳转指令覆盖函数的前五个字节。中间件函数然后可以选择 return 给调用者或调用 trampoline 的一段代码。 trampoline 恢复原来被替换的代码,跳回原来的热补丁函数+5,防止非终止循环。

还有 IAT 挂钩,但更多的是挂钩 API 调用,这些调用通过位于 executable 文件的 headers 中的导入地址 table 解析其地址格式。

VMT 是另一种形式的挂钩,其中虚拟方法可以被挂钩,因为它的地址在虚拟方法中被替换 table。类似于 IAT,但 object 的每个实例都指向虚拟方法 table.

看看这个book这是我最初了解 IAT 和热补丁的地方。