【发布时间】:2020-03-06 04:18:50
【问题描述】:
#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
【问题讨论】:
-
显然该功能(您不知道它是哪一个)想要更改您的
const char。const char对你来说很重要还是你介意让它可变? -
@TedLyngmo 它是可变的
-
不,不是根据编译器。显示完整的错误消息并指向您显示的代码中的确切行。
-
@TedLyngmo i.stack.imgur.com/Ne0bp.png 抱歉
-
Ted 想说的是,字符串文字被认为是“const”,它的内容不会传递给签名不能保证它不会改变它的函数。因此,
CreateThread期望void*期望线程函数可以做它想做的事情。因此,编译器禁止从const char*转换为非常量void*。你当然可以用const_cast抛弃这种不变性,但这不是你唯一的问题。您认为远程进程将如何处理来自另一个进程的地址变量?它不会指向你认为的字符串!
标签: c++ dll dll-injection