【问题标题】:How can we get the physical address in GDB?我们如何获取 GDB 中的物理地址?
【发布时间】:2011-12-01 06:28:16
【问题描述】:

OS 阻止 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 :( 在我来这里询问之前,我做了很多研究 + 测试。 谢谢。

【问题讨论】:

    标签: visual-studio debugging gdb


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢。本质上,您是说即使在 C 语言中,&variable 也是一个虚拟地址?
      【解决方案3】:

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

      【讨论】:

      • 感谢您的帮助。有人告诉我,您可以通过使用称为“页面地图”的东西以某种方式做到这一点?我认为命令是mmap。这更像是我朋友想尝试的尝试。
      猜你喜欢
      • 2020-09-29
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      • 2014-10-02
      • 2011-09-09
      相关资源
      最近更新 更多