Здравствуйте, Евгений Музыченко, Вы писали:
VAB>>добавлю, что все это в настоящее время делает Driver Verifier & Application VerifierАвтор: Valery A. Boronin
Дата: 02.01.06
в ядре и user mode соотв.
ЕМ>Ага, щаз
Их не иначе, как телепаты писали, и научили догадываться, как проверять целостность каждого объекта
И статически размещенные объекты они тоже мусором прописывают, чтобы правильность инициализации в конструкторе проверить?
выделяемые блоки памяти таким макаром защищаются, это точно. с конструкторами же в С тяжко.
насчет постоянной проверки целостности — это уже конечно руками ибо критерий целостности в общем виде не совсем ясен...
но все равно первые 2 пункта из 4х покрываются
VAB>>PS отмечу что подобные "свои" или стянутые у Руссиновича verifiers (MemAllocatePool and other MemXxx wrappers кто помнит) были практически у всех разработчиков в то время...
ЕМ>Только блоки памяти проверять — это меньшая часть заботы...
...и тем не менее почему бы ее не поручить спец инструментам

... << RSDN@Home 1.2.0 alpha rev. 648>>
Здравствуйте, Valery A. Boronin, Вы писали:
VAB>с конструкторами же в С тяжко.
Понятно, что "конструктором" называется код, инициализирующий структуру данных

Как он оформлен — дело десятое. Поэтому в C++ и удобнее такие проверки вводить в конструкторе/деструкторе.
VAB>насчет постоянной проверки целостности — это уже конечно руками ибо критерий целостности в общем виде не совсем ясен...
Тоже гораздо удобнее в C++. Заводится в каждом классе функция Check, и натыкивается вызовов везде, где можно, включая обращения к объектам из "чужих" классов. В plain C придется извращаться с префиксами/суффиксами, теряется прозрачность.
ЕМ>>Только блоки памяти проверять — это меньшая часть заботы...
VAB>...и тем не менее почему бы ее не поручить спец инструментам
Хотя бы потому, что специнструменты сообщат лишь о факте нарушения, и не более того. Например, Driver Verifier, обнаружив при выгрузке драйвера неосвобожденные блоки памяти, не находит ничего умнее, как свалить систему в BSOD, указав только количество неосвобожденных блоков, а толку с этого — почти никакого. Собственная же система управления памятью, во-первых, перечислит все блоки с адресами, размерами и метками (либо адресами, из которых вызывался new), а, во-вторых, сама их освободит. Чаще всего ничем страшным это не грозит, на перезагрузках экономится немало времени.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Danchik, Вы писали:
D>Здравствуйте, Valery A. Boronin, Вы писали:
D>[Skip]
VAB>>если известна область памяти которая затирается — если повезет и она одна и та же иногда, то есть решение
VAB>>- подключите к машине отладчик удаленный (WinDbg + VM Ware сгодится)
VAB>>- путем проигрывания проблемного сценария в виртуалке (чтобы шансы на воспроизведение были выше, лучше заснапшотить поближе к моменту падения и одно и тоже состояние проигрывать в надежде на те же адреса и т.п.), можно сделать так:
VAB>>- сначала падаем и смотрим по какому адресу проблема, адрес-диапазон запоминаем
VAB>>- перезапуск виртуалки и в отладчике ставим бряки на запись по этому адресу
VAB>>- удим рыбу
D>Могу предложить даже готовое решение как выловить такое место.
D>Есть такой продукт SmartHeap, который реализует скоростной менеджер кучи (подменяются все New, Alloc, etc.). В нем есть Debug DLL со множествами способов отладки таких ситуаций:
D>1. К каждому выделенному указателю присобачивается вначале и в конце дополнительные контрольные байты. Если их кто то перетер то через секунд 5 (настривается) выскакивает диалжг "Типа AAA указатель такой то был перетерт" — типа переполнение буфера, с дикой информацией Время выделения, CallStack выделения, Поток, иеще куча всего.
D>2. Некоторые указатели можна поставить на мониторинг, система буте следить что бы в них ничего не изменилось, случайно Работает по принципу чеканья области памяти на CRC через определенное время
D>3. DeferFree — интересная штука. Вы освобождаете указатель, но система не отдает его обратно в кучу, а держит его определенное время, забивает его специальными символами и следит что бы в него никто не записал.
D>4. Может и не все вспомнил... Читайте что можна тут: HeapAgent. Если заинтересовало, могу для теста выслать (продукт совсем и даже очень не бесплатный)
а можно мне тоже HeapAgent? очень надо...
D>4. Может и не все вспомнил... Читайте что можна тут: HeapAgent. Если заинтересовало, могу для теста выслать (продукт совсем и даже очень не бесплатный)
Давайте меняться, меняю агент на последний смартхип!