改变c++中函数的返回值(在运行时)



我想改变一个外部函数(在运行时)的返回值,这是在另一个DLL内,当程序启动时加载。

我想做的实际例子:

dll内部函数:

int numberOfMoney() {
return 0;
}

主程序:

HMODULE handle = LoadLibraryA("/myDll.dll");
auto gotFunc = GetProcAddress(handle, "numberOfMoney");
// making numberOfMoney returning 1000 ???

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

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

也有IAT挂钩,但更多的是挂钩API调用,它们通过位于可执行文件格式头中的导入地址表来解析它们的地址。

VMT是另一种形式的挂钩,在这种挂钩中,由于虚方法的地址在虚方法表中被替换,虚方法可以被挂钩。与IAT类似,但是对象的每个实例都指向虚方法表。

看看这本书,这是我最初学习IAT和热补丁的地方。

相关内容

最新更新