我正在尝试创建一个用于执行 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 + offset
将 offset*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/