#include <Windows.h>
HANDLE h = OpenProcess(PROCESS_CREATE_THREAD, FALSE, 34808); //Creating a remote thread
int main() {
LPVOID path = "MessageBoxDLL.dll";
CreateRemoteThread(h, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, path, 0, NULL);
}
[当我尝试运行我的代码时,它返回错误“无法从const char转换为lpvoid”。我有点迷茫,为什么不让我给它一个有效的路径,甚至为什么它需要转换我的值。我玩了一些,但找不到任何可行的解决方案。https://i.stack.imgur.com/Ne0bp.png
您正在尝试创建远程线程;
CreateRemoteThread(h, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, path, 0, NULL);
并且您希望该线程的入口点为LoadLibraryA
。 LoadlibraryA不满足线程入口点的正确函数签名。显式强制转换强制其进行编译,但只会创建未定义的行为。此外,在CreateRemoteThread可以完成任何操作之前,path
超出范围。不确定这对远程线程意味着什么。
您可能真正想要的
DWORD __stdcall ThreadFunction(void* params)
{
HMODULE hDLL = LoadLibraryA("MessageBoxDLL.dll");
// whatever else you need to do
return 0;
}
int main()
{
HANDLE hThread = CreateRemoteThread(h, NULL, 0, ThreadFunction, NULL, 0, NULL);
WaitForSingleObject(hThread, INFINITE);
return 0;
}
关于是否成功将DLL加载到目标进程中,这是另一个问题。