gpt4 book ai didi

c++ - 如何返回所有可访问内存位置的地址?

转载 作者:行者123 更新时间:2023-11-28 06:52:34 24 4
gpt4 key购买 nike

问题陈述:

我知道使用 C++ 无法直接访问所有内存位置,但我想做的就是通过应用程序返回所有可访问的 ram 内存位置。将此地址列表存储在动态变量中变得不可能,因为我们将需要更多空间来保存持有该地址的变量的地址!但这并不重要,因为我可以将它保存在文本文件中。即使尝试读取这样的内存位置也会使应用程序崩溃。如果应用程序提供更好的错误消息,我可以编写代码来获取所有可访问内存位置的地址,而不是崩溃。

如果有返回此地址列表的方法,我想知道(我使用的是 windows 7)。提前致谢。

编辑1

我已经尝试了以下想法来尝试返回是否可以访问内存位置:

包含两个代码:

第一个:

#include <stdlib.h>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
if(!(system("\"C:\\Users\\ ...\\read0.exe \""))// I have not provided the complete path
cout<<"readable memory location";
else
cout<<"not readable";
getch();
return 0;
}

第二个:

 ///one trying to read the accessible memory location
/// read0.cpp; released as read0.exe
int main()
{
int *a;//runs in 32-bit computer
a= (int*)0;
if((*a))
{/*do nothing; just try reading the memory location*/
}
return 0;
}

当第一个控制台文件打开第二个时,会导致第二个文件崩溃;它会导致操作系统打开一个窗口,要求调试或关闭应用程序。这会延迟时间并使其效率更低。因此,我一直在尝试找到一种方法来温和地禁用此消息框弹出,我发现了 this .

扩展问题

您能否在 Windows 7 命令提示符中提供命令行,以便我可以使用 C++ 中的系统命令将双字值设置为零,从而在崩溃期间禁用错误消息。我不熟悉使用 cmd 编辑注册表。

最佳答案

据我所知,这不能移植。

Linux 中有 /proc/<PID>/maps ,它(我相信)给出了一个进程的映射虚拟内存地址的完整列表。它看起来像这样:

00400000-004e5000 r-xp 00000000 08:01 11567110                           /bin/bash
006e4000-006e5000 r--p 000e4000 08:01 11567110 /bin/bash
006e5000-006ee000 rw-p 000e5000 08:01 11567110 /bin/bash
006ee000-006f4000 rw-p 00000000 00:00 0
02243000-0242e000 rw-p 00000000 00:00 0 [heap]
7f1d1744e000-7f1d17459000 r-xp 00000000 08:01 5260634 /lib/x86_64-linux-gnu/libnss_files-2.13.so
7f1d17459000-7f1d17658000 ---p 0000b000 08:01 5260634 /lib/x86_64-linux-gnu/libnss_files-2.13.so
7f1d17658000-7f1d17659000 r--p 0000a000 08:01 5260634 /lib/x86_64-linux-gnu/libnss_files-2.13.so
7f1d17659000-7f1d1765a000 rw-p 0000b000 08:01 5260634 /lib/x86_64-linux-gnu/libnss_files-2.13.so
7f1d1765a000-7f1d17664000 r-xp 00000000 08:01 5260630 /lib/x86_64-linux-gnu/libnss_nis-2.13.so
7f1d17664000-7f1d17863000 ---p 0000a000 08:01 5260630 /lib/x86_64-linux-gnu/libnss_nis-2.13.so
7f1d17863000-7f1d17864000 r--p 00009000 08:01 5260630 /lib/x86_64-linux-gnu/libnss_nis-2.13.so
(34 more lines)

关于c++ - 如何返回所有可访问内存位置的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23669444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com