我有这个钩子函数在x86上运行正常。感谢Bo Persson。
void __fastcall Hook(Class* ThisInECX, int UnknownEDX, OtherClass* P1, void* P2, void* P3)
{
static void* OriginalFunctionPointer = GetProcAddress(GetModuleHandleA("Some.dll"), "[...]");
static auto OriginalFunction = ((void(__fastcall*)(Class* ThisInECX, int UnknownEDX, OtherClass* P1, void* P2, void* P3))OriginalFunctionPointer);
OriginalFunction(ThisInECX, UnknownEDX, P1, P2, P3);
}
现在我正在尝试将其移植到x64。我从几个片段中发现和理解的是: 我在前面有另一个变量“int UnknownRDX”但没有它在atleast上正确称为OriginalFunction。 我的真实变量(P1等)似乎以某种方式被抵消(或者我的问题是不同的)。 我实际上需要知道这个声明是否正确,所以我可以在更糟糕的位置寻找问题。
void Hook(Class* This, int Unknown0, int Unknown1, OtherClass* P1, void* P2, void* P3)
{
static void* OriginalFunctionPointer = GetProcAddress(GetModuleHandleA("Some64.dll"), "[...]");
static auto OriginalFunction = ((void(*)(Class* This, int Unknown0, int Unknown1, OtherClass* P1, void* P2, void* P3))OriginalFunctionPointer);
// Using P1 here is fine on x86 but not on x64
OriginalFunction(This, Unknown0, Unknown1, P1, P2, P3)
}
答案 0 :(得分:1)
x64上只有一个调用约定,所以你可以从签名中删除它。可能出现的问题是您尝试从x64函数加载x86版本的过程。
编辑:哦等等,你之前发过关于x86 / x64挂钩的问题,对吗?我非常有信心这不是问题所在。
我要说的是,之前,您的代码依赖于调用约定特定的黑客攻击,但是在x64上只有一个调用约定。