本帖最后由 w759003376 于 2024-5-30 18:06 编辑
下面是执行远程自定义函数代码,代码大概逻辑就是远程在对应进程上执行程序,程序执行的就是我这边自定义的一个函数RemoteThreadProc,这函数内容就是打印test,但是执行后对应远端的进程会异常
有大佬看到出问题吗
[C++] 纯文本查看 复制代码 #include <windows.h>
#include <iostream>
// 全局变量,用于存储加载的DLL模块句柄
HMODULE g_hModule = NULL;
HMODULE hModule;
DWORD lpExitCode;
DWORD LoadAddr;
// 远程线程执行函数,用于加载DLL
DWORD WINAPI RemoteThreadProc(LPVOID lpParameter)
{
std::cout << "test" << std::endl;
return 0;
}
BOOL LoadDll(DWORD ProcId)
{
LPVOID DllAlloc;
// 获取目标进程的句柄
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcId);
std::cout << hProc << std::endl;
if (hProc == NULL)
{
std::cerr << "无法打开进程" << std::endl;
return FALSE;
}
// 创建远程线程,在目标进程中执行加载DLL的操作
HANDLE hThread = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)RemoteThreadProc, NULL, 0, NULL);
if (hThread == NULL)
{
std::cerr << "无法创建远程线程" << std::endl;
VirtualFreeEx(hProc, lpRemoteDllPath, 0, MEM_RELEASE);
CloseHandle(hProc);
return FALSE;
}
// 等待远程线程执行完毕
WaitForSingleObject(hThread, INFINITE);
std::cout << "开始清理资源" << std::endl;
// 清理资源
//CloseHandle(hThread);
// VirtualFreeEx(hProc, lpRemoteDllPath, 0, MEM_RELEASE);
// CloseHandle(hProc);
return TRUE;
}
int main()
{
DWORD processId =15228; // 目标进程的ID
if (LoadDll(processId, dllPath))
{
// 成功执行自定义函数后的操作
}
return 0;
}
|