我们怎样才能获得GDB中的物理地址?

时间:2011-10-05 07:39:31

标签: visual-studio debugging 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分:(在我来这里问之前,我做了很多研究+测试。 感谢。

3 个答案:

答案 0 :(得分:3)

你不能,程序和gdb根本就不知道它,这是虚拟化内存的重点。操作系统负责按需向程序分发足够大的块。

答案 1 :(得分:3)

如果你的意思是物理内存硬件上的实际地址,那么就没有这样的事情(考虑到操作系统可能决定将你的页面交换到磁盘等)。

见这里:How to translate a virtual memory address to a physical address?

答案 2 :(得分:2)

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