Показать содержимое раздела общей памяти в WinDbg? - PullRequest
2 голосов
/ 24 декабря 2008

У меня есть пара программ, которые общаются, используя именованный раздел памяти. Можно ли как-нибудь просмотреть содержимое этого раздела общей памяти из WinDBG, либо в режиме пользователя, либо в режиме ядра? У меня нет указателя на него, но я знаю имя.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2011

Просто попытался сделать это на нашей общей памяти, не получая именно то, что вы хотите, но я помещаю здесь заметки для потомков:

  • Я не смог найти простой способ получить дескриптор из имени, но если вы сделаете «! Handle 0 f», а затем выполните поиск в выводе, вы увидите имена ваших объектов ядра и их идентификаторы дескрипторов: get справиться с этим.
  • очевидно, что объект ядра разделяемой памяти не имеет специфичного для процесса адреса, но .call / s KnownFuncWithSamePrototype MapViewOfFileEx возвращает то, что выглядит как действительный указатель

Вам нужны полные символы, чтобы '.call' работал, но у вас его нет для MapViewOfFile (Ex), я обнаружил функцию, которая возвращает указатель и принимает шесть параметров в нашем коде, поэтому я не стал придется перекомпилировать, чтобы заставить это работать (это то, что KnownFuncWithSamePrototype означает выше). Я не уверен, если это вариант для вас.

Надеюсь, это поможет!

0 голосов
/ 26 декабря 2008

Используя отладчик в пользовательском режиме ... Вы могли бы написать очень простое тестовое приложение, которое получает доступ к именованной секции памяти (то есть вызывает OpenFileMapping, а затем MapViewOfFile), а затем запустить это приложение в отладчике? Вы должны пройти мимо вызовов, чтобы получить доступ к разделу, а затем проверить представление этого раздела в этом разделе.

(Если это помогает, заголовок «Второй процесс» на на этой странице MSDN предоставляет пример кода для процесса доступа к именованному разделу общей памяти и сопоставления его с адресным пространством.)

Я, как правило, фанат написания небольших инструментов тестирования, чтобы помочь в отладке подобных вещей ... Если вы хотите сделать вещи проще, вы можете даже написать инструмент тестирования, чтобы автоматически разбивать любые подключенные отладчики (используя функцию как DebugBreak).

...