Доброго всем времени суток!
По "ходу жизни" написал простенькую прогу для анализа работы с кучами некой программы.
Не может ли кто-нибудь просвятить как объяснить следующую ситуацию:
Написан код (по Рихтеру конечно) хукающий функции из kernel32.dll (msvcrtXXX.dll отключена опцией линкера):
HeapCreate, HeapAlloc, HeapReAlloc, HeapFree, HeapDestroy.
Общая схема эксперимента такова:
1. Подопытная программа:
#include <windows.h>
int main()
{
// HANDLE hHeap = HeapCreate(...);
// HeapDestroy(hHeap);
return 0;
}
2. dll правящая IAT.
3. "launcher" создает процесс, удаленный поток в нем — загрузка dll.
И что меня смущает.
По логу работы в mainCRTstartup (до main) создается куча HeapCreate (размером в 1 страницу), несколько вызовов HeapAlloc (небольшие объемы ~30 байт),
но HeapFree один, а HeapDestroy вообще нет.
Я осознаю, что в принципе, даже если это все отражает действительность, то все равно это допустимо считать "копейками".
Но я полагаю, что у меня где-то ошибка, не подскажете ли, где может быть скрыт у меня такой баг, который просто не ловит HeapDestroy. Но с учетом того, что если раскоментировать две строки из кода, то он все нормально — "ловяться" HeapCreate, потом HeapDestroy.
Или все таки это суровая действительность CRT?
Думаю, никто не будет удивлен, если сообщу, что утечек в CRT нет.
Еще раз посмотрел внимательнее — все таки msvcrt загружается.