我正在创建一个用于dll注入POC (概念验证)的小DLL。我使用的是codeblocks的c++ ide。
我的dll的main (dllmain)看起来像这样:
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
MessageBox(0, "myfirstdll loaded", "SUCCESS STATUS", MB_OK);
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break;
case DLL_PROCESS_DETACH:
// detach from process
break;
case DLL_THREAD_ATTACH:
// attach to thread
break;
case DLL_THREAD_DETACH:
// detach from thread
break;
}
return TRUE; // succesful
}现在,当我从客户端程序(希望是空的,它加载了!)加载动态链接库(使用LoadLibrary)时,我的消息框不会弹出。这是相当令人沮丧的,因为我正在做poc。我知道在dllmain中处理kernel32.dll等密集型业务时普遍存在的安全问题,但我这里的问题并不是安全性;我只需要在dllmain中弹出一个消息框。
那么,如何在加载dll时弹出消息框呢?
发布于 2011-12-05 02:41:21
See this question阅读有关DllMain中大量限制的内容。这不仅仅是安全问题。user32导出的任何内容都属于这一类。
换句话说,您不能在DllMain中使用MessageBox。改为使用kernel32中的OutputDebugString,它不显示任何UI。
发布于 2011-12-05 02:42:07
有很多有用的东西在DllMain中是做不到的。有关更多信息,请阅读Raymond Chen's blog中的所有相关文章。使用SetTimer甚至不能延迟执行,因为该函数在user32.dll中,而该库可能还没有装入。
https://stackoverflow.com/questions/8377569
复制相似问题