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 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看