Как мы можем получить физический адрес в GDB? - PullRequest
3 голосов
/ 05 октября 2011

ОС не позволяет 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 ]

3 голосов
/ 05 октября 2011

Если вы имеете в виду фактический адрес на физическом оборудовании памяти, то на самом деле такого нет (учтите, что ОС может принять решение об обмене вашей страницей на диск и т. Д.)

См. Здесь: Как преобразовать адрес виртуальной памяти в физический адрес?

3 голосов
/ 05 октября 2011

Вы не можете, программа и GDB просто не знают об этом, что является точкой виртуализации памяти. Операционная система заботится о распределении достаточно больших блоков по программам по запросу.

2 голосов
/ 05 октября 2011

Если вы напишите драйвер режима ядра для ОС, вы сможете узнать физические адреса внутри него. Но это, скорее всего, не практично (такой драйвер не так просто кодировать, адреса могут меняться из-за подкачки, и просто знание того, что адреса, вероятно, также бесполезны).

...