2011-10-05 230 views
2

OS阻止GDB向我们提供物理地址,相反,我们拥有虚拟地址。 有没有办法实际获得该物理地址?我们如何获得GDB的物理地址?

在Windows上进行调试Visual Studio看起来更有希望:地址看起来更像真实地址。但是,他们真的是物理地址吗?

我一直在调查GDB和Visual Studio与已经几天了下面的源代码(你可以从我的个人资料告诉这个)

int main() 
{ 
    int a = 10; 
    int b = 13; 
    int c; 
    c = a + b; 
    return 0; 

} 

PS:我知道,我一直在问很多类似的问题。这是一个超级广泛的话题,我感谢你们所有的帮助。 JFYI,现在是3:36 :(在进入这里之前我做了很多研究+测试。 谢谢。

回答

2

你不能,程序和gdb根本不知道它,哪是虚拟化内存的一点,操作系统负责按需分配足够大的块给程序

+0

感谢您的帮助。有人告诉我,通过使用称为“pagemaps”的东西,你可以做到?我认为这个命令是mmap。这更像是我的朋友想要尝试的尝试。 – CppLearner

2

如果您为操作系统编写内核模式驱动程序,您将能够从其中找到物理地址。但是这很可能是不实际的(编写这样一个驱动程序并不容易,因为交换地址可能会改变,并且知道这些地址可能也没用)。