Я думаю, что вы ищете кучи C++. Там у нас есть команда !heap
, которая может помочь выяснить, какие адреса кучи есть. С другим !heap <address>
можно получить длину этой кучи. Затем эту информацию можно подать в s
, чтобы ограничить диапазон адресов.
В то время как это возможно с помощью скриптов WinDbg и .foreach
или подобных, написание сценариев WinDbg на самом деле не очень весело, и они легко ломаются, поэтому давайте начнем с реального языка программирования.
С этой информацией давайте начнем сценарий PyKd, который может выполнять поиск по этим кучам. Поскольку я все еще не очень хорошо знаком с PyKd, я использую в основном dbgCommand()
, и я буду использовать часть Python для синтаксического анализа результатов, чтобы мне не приходилось полагаться на идентичный вывод по слову.
К сожалению, моя настройка PyKd нарушена во время написания этого ответа. Вот что у меня было до того, как он теперь разбивает мой WinDbg. Обратите внимание, что это неполно, потому что он не принимает байты поиска в качестве аргументов. Добавьте их туда, где есть XXX.
from pykd import *
heap = dbgCommand("!heap").split('\n')
for ntheap in heap:
if "NT Heap" in ntheap:
address = ntheap[0:ntheap.index("NT Heap")-1]
heapdetails = dbgCommand("!heap "+address.strip()).split('\n')
for detail in heapdetails:
if "Segment at" in detail:
end = detail[detail.index(" to ")+4:detail.index(" (")-1]
length = hex(int(end,16)-int(address,16))
results = dbgCommand("s "+address+" L?"+length+" XXX")
print(results)
Какая куча? C++ куча? –