Итерация по выводу! DumpHeap для чтения значения со смещением памяти

Я пытаюсь придумать выражение командной строки WinDbg, которое принимает вывод!DumpHeap команда и для каждого адреса читает 64-битное значение из смещения0x08 после адреса. Я думаю, что это возможно (не уверен в этом), но каждая попытка, которую я сделал до сих пор, терпит неудачу с некоторой ошибкой.

Я много искал, но большинство статей о WinDbg показывают простые примеры, которые я могу попробовать, но мои попытки терпят неудачу.

У меня есть дамп процесса рабочего процесса ASP.NET. Процесс имеет некоторый рост памяти, но нет явного нарушителя, поэтому я пытаюсь перечислить несколько объектов, которые много раз появляются в памяти. Я использую sos.dll для управляемой отладки расширений WinDbg.

Вот что я пытаюсь сделать

.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{r @$t0=poi(myaddress+0x8);!do @$t0;.echo ************* myaddress}

Обратите внимание, что приведенная выше команда должна быть в одной строке - здесь я добавил разрыв строки только для лучшей читабельности.

Для приведенной выше строки WinDbg печатает эту ошибку:Couldn't resolve error at 'myaddress+0x8);!do @$t0;.echo ************* 00000001003cb870'.

Я пытаюсь перебрать все адреса, возвращенные!DumpHeap - каждый адрес должен идти вmyaddress переменная. Затем для каждого адреса я пытаюсь установить$t0 пользователь регистрируется на значение, прочитанное изmyaddress+0x8,!do (!DumpObject) команда затем выдаст объект по этому адресу.

Если я бегу только (опять же на одной строчке в WinDbg):

.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{!do myaddress;.echo ************* myaddress}

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

Это возможно, или я не на том пути?

Ответы на вопрос(0)

Ваш ответ на вопрос