本文目录
- 关于LoadLibrary和LoadLibraryEx 的使用问题
- LoadLibrary 问题 VC++
关于LoadLibrary和LoadLibraryEx 的使用问题
两个函数的主要区别是 LoadLibraryEx 多了个参数 dwFlags,可以设定一些动态加载 DLL 时的选项。 一般来说,LoadLibraryEx 加载 DLL 时并没有调用 DLL,也就是不会执行 DllMain,这样以来即使 DLL 本身存在错误也会映射成功的。而 LoadLibrary 加载时不旦旦映射,还会去调用执行 DllMain。 如果确认一个 DLL 本身不存在问题,但用 LoadLibrary 加载失败用 LoadLibraryEx 加载成功,此时一要看 DllMain 是否作出了某些限制,二要看 DLL 本身是否链接了其他 DLL。
LoadLibrary 问题 VC++
::WriteProcessMemory(hHandle,lpDate,(LPTHREAD_START_ROUTINE)&str,strlen(str)+4,NULL);改成:::WriteProcessMemory(hHandle,lpDate,str,strlen(str)+4,NULL);一个问题:为什么是 strlen(str)+4 ? 不是 strlen(str)+1 ?另一个问题:0x7C80AEEB 是 LoadLibraryA 的地址还是 LoadLibraryW 的地址。因为传娣的参数是 str ,所以必须使用相应的 LoadLibraryA 函数。 另外:VOID Load(LPVOID) 和 LPTHREAD_START_ROUTINE 定义的函数是不匹配的,你的远程进程执行 Load 返回时不会挂掉吗?LPTHREAD_START_ROUTINE 要求返回一个 DWORD ,而你的函数没有返回值,因此,调用堆栈会相差四个字节,而且 LPTHREAD_START_ROUTINE 要求函数是__stdcall ,你的 Load 未声明调用约定,在 VS 环境下,VS 默认用 __cdecl 来编译的,这样也会时函数执行返回时,调用堆栈产生不平衡的。Load 函数应该这样声明: DWORD WINAPI Load(LPVOID)Load 函数中只是简单调用了 LoadLibrary 函数,楼主既然已经知道 LoadLibrary 的地址了,那么 CreateRemoteThread 可以直接让线程执行 LoadLibrary 了:::CreateRemoteThread(hHandle,NULL,0,(LPTHREAD_START_ROUTINE)0x5F42FEF5,lpDate,0,&lj);