2017-01-02 10 views
0

Я ищу инструмент/скрипт WinDbg, который может помочь мне найти последовательность байтов только в блоках кучи.Искать последовательность байтов только в кучевых блоках

Для 32 процесса Bit можно использовать следующую команду для поиска байт путем поиска всего пространства процесса пользовательского режима, но для 64 битных процесса это занимает много времени

s 0 L?0x7fffffff 41 42 43 44 45 46 
+0

Какая куча? C++ куча? –

ответ

1

Я думаю, что вы ищете кучи 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) 
+0

PLS, загрузите аварийный дамп – ussrhero

+0

@ussrhero: Я пытался его получить, но он просто прекращает процесс без каких-либо исключений. Я уже отлаживал WinDbg, чтобы узнать, что происходит –

+0

Что такое версия python? Аналогичная ошибка с python 2.7.11 – ussrhero