我正在为exe编写分析工具。我有这个exe的源代码,所以我知道它使用的功能。 我需要挂钩几个特定的函数,以便我可以检查传递的参数。我感兴趣的函数不是任何DLL的一部分,但它们是程序的一部分。
我开始使用Detours编写一个拦截函数调用的挂钩DLL。我编写了挂钩DLL,我在其中指定了要挂钩的函数,但遗憾的是,由于没有DLL可供参考,当我编译挂钩DLL时,我无法解析函数名称。
我该如何解决这个问题?
答案 0 :(得分:0)
这不是一个完美的解决方案,但可以解决您的问题:
您可以通过在目标程序中执行以下操作来获得函数的相对偏移量:
int FuncToGet()
{
int x = 5;
return x;
}
int main()
{
intptr_t baseAddr = (intptr_t)GetModuleHandle(NULL);
intptr_t relativeoffset = baseAddr - (intptr_t)&FuncToGet;
std::cout << "Relative offset = 0x" << std::hex << &relativeoffset;
}
您可以使用它来打印要挂接的功能的相对偏移量。
然后将相对偏移量添加到目标进程中模块的基地址,该偏移量是在运行时获取的。
然后您可以使用该地址挂接功能