nod3232332 2015-07-30 12:43 采纳率: 0%
浏览 1371

关于远程线程加载dll释放的问题

有下面的代码:
'''
EnablePrivilege(SE_DEBUG_NAME, TRUE);
hprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processid);
char buff[] = "Win32Project2.dll";
PSTR chRemote = NULL;
chRemote = (PSTR)VirtualAllocEx(hprocess, NULL, lstrlen(buff) + 1, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hprocess, (PVOID)chRemote, (PVOID)buff, lstrlen(buff) + 1, NULL);

PTHREAD_START_ROUTINE rThread, r2;
rThread = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")), TEXT("LoadLibraryA"));
HANDLE hThread = NULL, h2 = NULL;
hThread = CreateRemoteThread(hprocess, NULL, 0, rThread, (PVOID)chRemote, 0, NULL);
WaitForSingleObject(hThread, INFINITE);

DWORD hdll=0;
GetExitCodeThread(hThread, &hdll);
r2 = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")), TEXT("FreeLibrary"));
    h2 = CreateRemoteThread(hprocess, NULL, 0, r2, (PVOID)hdll, 0, NULL);
    WaitForSingleObject(h2, INFINITE);

VirtualFreeEx(hprocess, (PVOID)chRemote, 0, MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hprocess);
CloseHandle(h2);

'''
以上代码在win7 32位下可以正常加载Win32Project2.dll到explorer.exe,之后也可以正常卸载,不过在win8.1 64位下选择x64平台编译运行之后,可以正常加载dll,但FreeLibrary失败,无法卸载dll,这是什么原因??

  • 写回答

1条回答 默认 最新

  • oyljerry 2015-07-30 13:48
    关注

    FreeLibrary失败时,GetLastError获取错误码看是什么错误信息,这才好分析。

    评论

报告相同问题?

悬赏问题

  • ¥15 Stata 面板数据模型选择
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用