Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用winapi ReadProcessMemory和vector从另一个进程读取缓冲区? std::byte*ReadBytes(PVOID地址、大小和长度) { 标准::字节*缓冲区=新标准::字节[长度]; STD:CUT< P>自从C++ 11,将提供一个指向后备数组的指针。如果你使用旧的工具而不支持C++ 11,缓冲区[0 ] < /C>可能是有效的,我从来没有看到它不工作,但是没有被标准保证。_C++_Winapi_Readprocessmemory - Fatal编程技术网

如何使用winapi ReadProcessMemory和vector从另一个进程读取缓冲区? std::byte*ReadBytes(PVOID地址、大小和长度) { 标准::字节*缓冲区=新标准::字节[长度]; STD:CUT< P>自从C++ 11,将提供一个指向后备数组的指针。如果你使用旧的工具而不支持C++ 11,缓冲区[0 ] < /C>可能是有效的,我从来没有看到它不工作,但是没有被标准保证。

如何使用winapi ReadProcessMemory和vector从另一个进程读取缓冲区? std::byte*ReadBytes(PVOID地址、大小和长度) { 标准::字节*缓冲区=新标准::字节[长度]; STD:CUT< P>自从C++ 11,将提供一个指向后备数组的指针。如果你使用旧的工具而不支持C++ 11,缓冲区[0 ] < /C>可能是有效的,我从来没有看到它不工作,但是没有被标准保证。,c++,winapi,readprocessmemory,C++,Winapi,Readprocessmemory,再看一遍代码,如果您有std::byte,C++11支持不是问题 所以 std::vector ReadBytes(PVOID地址、大小和长度) { std::向量缓冲区(长度); std::它能工作吗,谢谢!然后如何将部分缓冲区转换为我想要的类型,如读取缓冲区[3:11]无符号长?您需要担心是否要将字节数组的部分解释为字节数组以外的任何内容。最安全的做法是memcpy将数据输出到适当类型的数组中。memcpy(&buffer[3],mylongar,sizeof(mylongarr))。只有

再看一遍代码,如果您有
std::byte
,C++11支持不是问题

所以

std::vector ReadBytes(PVOID地址、大小和长度) { std::向量缓冲区(长度);
std::它能工作吗,谢谢!然后如何将部分缓冲区转换为我想要的类型,如读取缓冲区[3:11]无符号长?您需要担心是否要将字节数组的部分解释为字节数组以外的任何内容。最安全的做法是
memcpy
将数据输出到适当类型的数组中。
memcpy(&buffer[3],mylongar,sizeof(mylongarr))
。只有在您对对齐有铁质保证的情况下才可以转换为cast“我从未见过它不起作用,但标准没有保证”-是的。
std::vector
始终被定义为连续缓冲区,并且
运算符[]
返回对其元素的引用,因此
&buffer[0]
buffer.data()
始终是同一个指针,即使在没有
data()的旧版本中也是如此
更安全的是:,至少C++20出现一次。@RemyLebeau 100%同意,但我认为它没有被明确称为合法的原因是
vector
和类似代理返回专门化的可能性。 std::vector<std::byte> ReadBytes(PVOID address, SIZE_T length) { std::vector<std::byte> buffer(length); std::cout << "length" << buffer.size() << std::endl; ReadProcessMemory(this->processHandle, address, buffer.data(), length, NULL); return buffer; };