c++ - 使用 CreateRemoteThread API 时如何修复 "LPVOID: unknown size"错误?

标签 c++ winapi dll dll-injection createremotethread

我正在尝试创建一个用于执行 DLL 注入(inject) 的工具,方法是使用 VirtualAclloc() API 在正在运行的进程的内存中写入 DLL,然后找到偏移量入口点并将其传递给 CreateRemoteThread() API,方法是将入口点偏移量添加到 VirtualAlloc 函数的基地址。

因为在调用 CreateRemoteThread() 时我没有任何需要传递给 lpStartAddress 的参数,所以我将 lpParameter 初始化为 NULL .


LPVOID lpParameter = NULL;

...
...
thread_handle = CreateRemoteThread(process_handle, NULL, 0, (LPTHREAD_START_ROUTINE)(base_address + offset), lpParameter, 0, NULL);

编译代码时出现错误:

LPVOID: Unknown Size" and the message "Expression must be a pointer to a complete object type.

有没有办法可以将 lpParameter 的值作为 NULL 传递?

最佳答案

base_address + offsetoffset*sizeof *base_address 字节添加到指针 base_address。但是如果 base_address 的类型是 LPVOID 那么 *base_address 没有大小,所以这是一个错误。看看你的 C++ 书中关于指针运算的部分。

根据上下文,我猜你应该将 base_address 更改为 char* 而不是 LPVOID。或者您可以添加这样的转换 (LPTHREAD_START_ROUTINE)((char*)base_address + offset)

关于c++ - 使用 CreateRemoteThread API 时如何修复 "LPVOID: unknown size"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56897872/

相关文章:

c++ - 将上次修改时间的字符串表示形式转换回其类型(std::filesystem::file_time_type)

c++ - 等待 win32 线程

winapi - Windows 静态控制如何阻止输入焦点

c++ - 如何获取 Windows 文件 "author"而不是所有者使用带有 Windows API 的 C++

c++ - 为什么模板只能在头文件中实现?

c++ - 如何在 C++ 中计算二进制位?

c++ - 如何在 C++ 中分析流量转储文件中的数据包信息?

c++ - 我如何找出我的 C++ 程序使用的 DLL?

c++ - Windows 密码过滤器 DLL 未加载

c# - 从 C# 将数据传入和传出 DLL