操作系统阻止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分:(在我来这里问之前,我做了很多研究+测试。
感谢。
答案 0 :(得分:3)
你不能,程序和gdb根本就不知道它,这是虚拟化内存的重点。操作系统负责按需向程序分发足够大的块。
答案 1 :(得分:3)
如果你的意思是物理内存硬件上的实际地址,那么就没有这样的事情(考虑到操作系统可能决定将你的页面交换到磁盘等)。
见这里:How to translate a virtual memory address to a physical address?
答案 2 :(得分:2)
如果您为操作系统编写内核模式驱动程序,您将能够从内部找到物理地址。但这很可能是不切实际的(编写这样的驱动程序并不容易,地址可能因交换而改变,只知道地址可能也没用)。