visual studio-将C++__fastcall Hook从x86移植到x64
visual studio - Porting C++ __fastcall Hook from x86 to x64
我有一个钩子函数,它在x86上运行良好。感谢Bo佩尔森。
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",但至少没有它,它正确地调用了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)
}
x64上只有一个调用约定,因此您可以从签名中去掉它。可能出现问题的是,您正试图从x64函数加载过程的x86版本。
编辑:哦,等等,你之前发布过关于x86/x64挂钩的问题,对吧?我很有信心这不是问题所在。
我想说的是,以前,你的代码依赖于调用约定特定的黑客,但在x64上只有一个调用约定。
http://msdn.microsoft.com/en-us/library/ms235286.aspx
相关文章:
- 为x86而非x64编译时出错
- 如何在 MSVC C++中迁移 x64 的 x86 代码
- 将内联程序集尾调用函数尾声替换为用于x86/x64 msvc的Intrinsics
- 将程序从x86转换为x64
- 将vector<vector<double>>从x86平台中创建的一个进程发送到x64中构建的另一个进程的最快方法是什么
- 现代C++中STL API的差异(当我在VS2017中将目标从x64切换到x86时)
- 在x64进程中调用x86 winapi函数
- 致命错误LNK1112:在 npm 安装期间,模块计算机类型'X86'与目标计算机类型'x64'冲突
- 在构建服务器上将 dll C++生成到两个平台 (x86+x64)
- C DLL通过C#UWP应用程序中的Win运行时组件适用于ARM,但对于X86/X64不适用于
- VC++ 异常处理在 x86 和 x64 上对于 IBPP / Firebird 客户端有所不同
- LNK2001在X64环境中的编译代码上看到的错误.但是,该代码在X86环境中填充了罚款
- Return value of std::hash ofr (x86/x64)
- 致命错误LNK1112:通过 vcvarsall .bat x86 运行构建'X86'模块计算机类型'x64'与目标计算机类型冲突
- 如何在 x86 和 x64 平台之间使用 boost::序列化
- VS2012 如何将 C# 的 AnyCPU 配置的输出目录设置为各自解决方案配置的 x86 和 x64 文件夹?
- QtGui4.lib(QtGui4.dll):致命错误LNK1112:模块计算机类型"X86"与目标计算机类型"x64"冲突
- ARM平台的数据转换(从x86/x64)
- 使用x86/x64 C API的c# AnyCPU库-打包结构,调用和回调
- 块匹配优化使用x86/x64流SIMD扩展