- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有几个关于 Microsoft Detours Library 的快速问题。我以前用过(成功),但是我只是想到了这个功能:
LONG DetourUpdateThread(HANDLE hThread);
我在别处读到这个函数实际上会挂起线程直到事务完成。这看起来很奇怪,因为大多数示例代码调用:
DetourUpdateThread(GetCurrentThread());
无论如何,显然这个函数“招募”了线程,这样当事务提交(并且绕行)时,如果它们位于“目标函数或 trampoline 函数中的重写代码内”,它们的指令指针就会被修改。 "
我的问题是:
事务提交时,当前线程的指令指针是否会在DetourTransactionCommit函数中?如果是这样,我们为什么要费心去更新它?
另外,如果入伍线程被挂起,当前线程如何继续执行(假设大多数示例代码调用 DetourUpdateThread(GetCurrentThread());)?
最后,您能否暂停当前进程的所有线程,避免竞争条件(考虑到线程可能随时被创建和销毁)?也许这是在交易开始时完成的?这将使我们能够更安全地枚举线程(因为似乎不太可能创建新线程),尽管 CreateRemoteThread() 怎么样?
谢谢,
保罗
作为引用,这里是简单示例的摘录:
// DllMain function attaches and detaches the TimedSleep detour to the
// Sleep target function. The Sleep target function is referred to
// through the TrueSleep target pointer.
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
{
if (dwReason == DLL_PROCESS_ATTACH) {
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)TrueSleep, TimedSleep);
DetourTransactionCommit();
}
else if (dwReason == DLL_PROCESS_DETACH) {
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)TrueSleep, TimedSleep);
DetourTransactionCommit();
}
return TRUE;
}
最佳答案
多么尴尬:我忘记了源可用!
DetourUpdateThread 默默地忽略当前线程的征用。否则,给定的线程被挂起。我想知道为什么所有代码示例都征用当前线程!这回答了前 2 个问题。
关于第三个问题:我发现另一个迂回库试图通过执行以下操作来挂起所有线程:
获取所有线程的快照
遍历快照并挂起我们尚未挂起的线程。
如果线程被挂起,则返回到 1(我们仍然跟踪已挂起的线程)。如果没有线程被挂起,那么我们就完成了。
我认为假设是如果我们可以遍历所有线程并且它们都已经挂起(即从我们获取快照之前),那么就不会再创建线程。不过对 CreateRemoteThread 不太确定!
编辑:回复:CreateRemoteThread。
“进程中一次只能有一个线程处于 DLL 初始化或分离例程中。”CreateRemoteThread“导致调用进程中每个 DLL 的入口点”。 http://msdn.microsoft.com/en-us/library/ms682437%28VS.85%29.aspx
如果您在 DllMain 函数中,则新线程无法开始执行(只要新线程尚未导致调用进程中每个 DLL 的入口点)。因此,如果您在 DllMain 函数中应用您的弯路,您可能只是避免了正在创建的新远程线程的竞争条件,并且其指令指针位于您重写的目标/蹦床函数中。
谢谢,
保罗
关于c++ - Microsoft Detours - DetourUpdateThread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2636594/
我有几个关于 Microsoft Detours Library 的快速问题。我以前用过(成功),但是我只是想到了这个功能: LONG DetourUpdateThread(HANDLE hThrea
我是一名优秀的程序员,十分优秀!