C++ Detours 3.0 express on MVS 2012 错误“找不到标识符”
Posted
技术标签:
【中文标题】C++ Detours 3.0 express on MVS 2012 错误“找不到标识符”【英文标题】:C++ Detours 3.0 express on MVS 2012 error "identifier not found" 【发布时间】:2013-04-15 11:03:59 【问题描述】:我的编译器:Microsoft Visual Studio 2012。 我的代码在 detours 2.1 上可以正常工作,但我不能再用我的编译器编译它(模块对 SAFESEH 图像不安全。)。我需要使用像 MVS2005 这样的旧编译器,但我不想这样做。
所以我需要更新我的代码并使用 detours 3.0。
编辑了一些东西,得到了 4 个错误。
error C3861: 'DetourFunction': identifier not found
error C3861: 'DetourFunction': identifier not found
error C3861: 'DetourRemove': identifier not found
error C3861: 'DetourRemove': identifier not found
这是代码块:
此处出现DetourFunction错误
o_NtQuerySystemInformation = (t_NtQuerySystemInformation)DetourFunction((PBYTE)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySystemInformation"), (PBYTE)My_NtQuerySystemInformation);
o_ZwOpenProcess = (t_ZwOpenProcess)DetourFunction((PBYTE)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwOpenProcess"), (PBYTE)My_ZwOpenProcess);
DetourRemove 此处的错误
DetourRemove((PBYTE)o_NtQuerySystemInformation, (PBYTE)My_NtQuerySystemInformation);
DetourRemove((PBYTE)o_ZwOpenProcess, (PBYTE)My_ZwOpenProcess);
更新
所以我尝试将其更改为 DetourAttach 和 DetourDetach,但我收到 PBYTE to PVOID 错误。
【问题讨论】:
你从哪里得到这个错误?显示代码。 这是完整的代码:pastebin.com/XtfSHxBL 嘿,任何人点击这个页面我可能有同样的 pbyte/pvoid 错误,可能看这里:[link]***.com/questions/21591698/… 【参考方案1】:DetourFunction
和 DetourRemove
已替换为 DetourAttach
和 DetourDetach
。使用它们并不难,并且该库附带了一组示例,您可以在其中了解如何使用这些 API。您的代码应如下所示:
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
o_NtQuerySystemInformation = (t_NtQuerySystemInformation)DetourAttach(&(PVOID&)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySystemInformation"), My_NtQuerySystemInformation);
o_ZwOpenProcess = (t_ZwOpenProcess)DetourAttach(&(PVOID&)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwOpenProcess"), My_ZwOpenProcess);
MyModuleHandle = (HMODULE)hModule;
MyPid = GetCurrentProcessId();
if (ul_reason_for_call == DLL_PROCESS_DETACH)
DetourDetach(&(PVOID&)o_NtQuerySystemInformation, My_NtQuerySystemInformation);
DetourDetach(&(PVOID&)o_ZwOpenProcess, My_ZwOpenProcess);
return TRUE;
【讨论】:
我知道这个帖子是个墓地,但 detours 真的让我头疼。 o_NtQuerySystemInformation 是对什么的引用? ntdll.dll 中指向 t_NtQuerySystemInformation 的指针的指针?这将如何定义?以上是关于C++ Detours 3.0 express on MVS 2012 错误“找不到标识符”的主要内容,如果未能解决你的问题,请参考以下文章
Detours 3.0 钩子 GetProcAddresss()
C++——Detours(Win32 API劫持)——劫持类方法
C++——Detours(Win32 API劫持)——劫持类方法
如何在 C++ 中使用 Detours 扩展程序内函数而不进入无限循环?