HEAP_ENTRY
Кучи хранят выделенные блоки в смежных сегментах памяти, каждый выделенный блок начинается с 8-байтового заголовка, за которым следуют фактические выделенные данные. Столбец HEAP_ENTRY - это адрес начала заголовка выделенного блока.
Размер
Менеджер кучи обрабатывает блоки кратными 8 байтам. Столбец - это количество выделенного фрагмента из 8 байтов. В вашем примере 0044 означает, что блок занимает 0x220 байт (0x44 * 8).
Prev
Умножьте на 8, чтобы иметь отрицательное смещение в байтах к предыдущему блоку кучи.
Флаги
Это битовая маска, которая кодирует следующую информацию
0x01 - HEAP_ENTRY_BUSY
0x02 - HEAP_ENTRY_EXTRA_PRESENT
0x04 - HEAP_ENTRY_FILL_PATTERN
0x08 - HEAP_ENTRY_VIRTUAL_ALLOC
0x10 - HEAP_ENTRY_LAST_ENTRY
UserPtr
Это указатель, возвращаемый приложению функцией HeapAlloc (вызывается функцией malloc / new). Поскольку заголовок всегда имеет длину 8 байт, он всегда равен HEAP_ENTRY + 8.
UserSize
Это размер, переданный функции HeapAlloc.
состояние
Это декодирование столбца Flags, указывающее, занята ли запись, освобождена ли она последним в своем сегменте,…
Имейте в виду, что в Windows 7/2008 R2 кучи по умолчанию используют интерфейс с именем LFH (Низко фрагментированная куча), который использует менеджер кучи по умолчанию для выделения фрагментов, в которых он отправлял данные, выделенные пользователем. Для этих куч, UserPtr и UserSize не будут указывать на реальные пользовательские данные.
Вывод !heap -s
показывает, какие кучи включены с LFH.