【发布时间】:2021-01-15 10:02:12
【问题描述】:
是否可以在c++中获取进程内存中第一个字符串的地址? 就像我不必遍历整个进程的内存来查找字符串,但我可以从第一个字符串的地址开始迭代?我说的是查找任何类型的变量中的第一个,而不仅仅是字符串,尽管我以它为例。 让我在代码中举一个例子:
for (int i = 1; i < 10000000; i++)
{
std::string buf;
ReadProcessMemory(hproc, (LPCVOID)i, &buf, sizeof(std::string), NULL);
std::cout << buf << std::endl;
}
这应该是必要的吗?我不能直接从第一个字符串的地址开始,还是以其他方式更快?
【问题讨论】:
-
即使你得到地址,以这种方式复制
std::string也是未定义的行为。在这种情况下,特别是std::string的析构函数可能是delete内存,并且由于此循环每次迭代都会破坏字符串,因此它可能会在delete随机地址,直到它崩溃。 -
你想做什么?你能澄清一下吗?
-
我正在尝试打印进程内存中的所有字符串。
-
你说的是进程的数据内存还是进程的可执行区域?
-
如果进程在运行时被换出到硬盘会发生什么?
标签: c++ windows loops memory system