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

时间:2014-05-15 04:47:28

标签: c++ memory windows-7 operating-system registry

问题陈述:

据我所知,使用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 ++中的系统命令将dword值设置为零,从而在崩溃期间禁用错误消息。我是使用cmd编辑注册表的新手。

1 个答案:

答案 0 :(得分:1)

据我所知,这不能轻易做到。

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)