Как отладить LFH Heap Corruption? - PullRequest
0 голосов
/ 16 октября 2019

У меня на сервере Windows 2008 sp1 каждые несколько месяцев появляется ошибка повреждения кучи. Стек вызовов для дампа:

00 03e8fca0 7713e0c3 04acc270 01752890 008867b0 ntdll!RtlpLowFragHeapFree+0x31
01 03e8fcb8 767614ad 01750000 00000000 04acc270 ntdll!RtlFreeHeap+0x105
02 03e8fccc 004dcf2b 01750000 00000000 04acc270 kernel32!HeapFree+0x14
03 03e8fd0c 004419cd 04acc270 03e8fd40 04acc270 MyServer!free+0x6e 
04 03e8fd20 00491bae 58c154ce 01753798 0300fea8 MyServer!Parser::~Parser+0x2d 
05 03e8fe9c 004a6a18 017537a8 0163e000 58c154ba MyServer!Sender::Send+0x22e 
06 03e8fee8 0040dba7 0163e000 58c15546 015f8288 MyServer!SendManager::OnSend+0x58 
07 03e8ff14 0042ea55 0163e000 01751348 015f8288 MyServer!Manager::Run+0x57 
08 03e8ff30 004076f7 0163e000 017529c8 00001f75 MyServer!Packer::Packing+0x65 
09 03e8ff5c 004058c5 01752890 03e8ff88 1000701e MyServer!PacketManager::CheckPacket+0x67 
0a 03e8ff68 1000701e 00000000 008867b0 751675a8 MyServer!Main::Run+0x15 
WARNING: Stack unwind information not available. Following frames may be wrong.
0b 03e8ff88 7676343d 008867b0 03e8ffd4 77149802 ServerDLL!Server::ServerFrame::ServiceProc+0x7e
0c 03e8ff94 77149802 008867b0 aa6a198e 00000000 kernel32!BaseThreadInitThunk+0xe
0d 03e8ffd4 771497d5 75167587 008867b0 ffffffff ntdll!__RtlUserThreadStart+0x70
0e 03e8ffec 00000000 75167587 008867b0 00000000 ntdll!_RtlUserThreadStart+0x1b

Строка, хранящаяся в 0x04acc270, является нормальной, но когда я вызываю delete, значение ESI устанавливается странным образом. Адрес назначен куче LFH, а выделенный байт - 7

. Я не могу найти причину из-за сложной структуры LFH в Windows 2008.

Программы проверки, которые внедряют DLL втакие модули, как GFlags или WindowsVerifier, не могут использоваться по запросу издателя.

Есть ли способ узнать, кто вызвал повреждение кучи LFH с помощью дампа и только PDB?

...