Windows核心编程的不正确的地方
青稞 2011-06-01 08:08:08 在Windows核心编程的第22章22.4节,使用远程线程注入DLL中,获取Kernel32中LoadlibraryW的地址时,书上说到:根据经验,系统在每个进程中会将Kernel32.dll映射到同一个地址。因此要向下面这样调用CreateRemoteThread:
PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW");
HANDLE hThread = CreateRemoteHandle(hProcessHandle, NULL, 0, pfnThreadRtn, pszLibFileRemote, 0, NULL);
我按照书上的样子写了个Demo,做了个类似的Hook,注入到所有进程中,结果只有我自己的这个进程中是正确加载了我的HookDLL,其余进程都没有加载HookDll。。
所以感觉书上说的不对,pfnThreadRtn应该只能获取到本进程中Kernel32中的LoadLibraryW的地址,而其他进程中Kernel32中的LoadLibraryW地址并非一样。。