Комментарии:
|
Похоже это - хронь Винды с прошлого века! 28.04.14 15:29
Автор: Zef <Alloo Zef> Статус: Elderman
|
Я с такими фокусами еще в 98й сталкивался - обращение по хендлу к "убитому" объекту приводит к чтению данных/исполнению кода, который может быть в любом состоянии от абсолютно живого до принадлежащего фрагментарно другим объектам, в т.ч. и живым.
Вполне взможно, что такие вещи можно вытворять и сейчас.
|
| |
это справедливо для любой ОС и проблема не системы, а приложения 28.04.14 21:05
Автор: dl <Dmitry Leonov>
|
|
| | |
Проблема в том, что не обнуляются указатели. 01.05.14 05:23
Автор: Zef <Alloo Zef> Статус: Elderman
|
Если бы обнулялись - был бы сразу ексепшен при попытке обращения и все баги легко бы выявлялись. А так - обратится и будет работать, пока не наткнется на переписанный блок или несуществующую страницу. А чем это вызвано? Поди - найди.
|
| | | |
еще раз, это не системная проблема 01.05.14 18:35
Автор: dl <Dmitry Leonov> Отредактировано 01.05.14 18:46 Количество правок: 7
|
К тому же обнуление указателя при удалении и очистка памяти, оставшейся после удаления объекта, - вообще совершенно разные проблемы. Первое еще дальше от системы, чем второе, поведение это одинаковое хоть в винде, хоть в юниксах. Я могу иметь несколько указателей, в которых лежит адрес одного и того же блока памяти, и никакая система волшебным образом не обнулит их всех при освобождении памяти через какой-то один указатель. Частично проблема решается с умными указателями, занимающимися подсчетом ссылок и самостоятельным освобожднением памяти, но это и более высокий уровень, и накладные расходы.
Но и за удаление объектов при обычной работе отвечает не система, а рантайм, выделяющий память на куче. В дебаг-версиях в принципе можно и проверять валидность выделенного рантаймом блока памяти через всякие _CrtIsMemoryBlock, _CrtIsValidHeapPointer и т.п. А вот если работать с памятью через VirtualAlloc/VirtualFree, то после обращения к освобожденному блоку без всяких обнулений указателей придет честное исключение, какое-нибудь EXCEPTION_ACCESS_VIOLATION. Только VirtualAlloc слишком дорогая для работы с отдельными объектами.
|
| | | | |
А, ты вот что имеешь в виду! 02.05.14 04:44
Автор: Zef <Alloo Zef> Статус: Elderman
|
Ну, от перекрестного обращения к реаллоцированной памяти, точно, ничто не спасет.
Я-то понял так, что обращения идут не непосредственно из пользовательского кода по указателю, а через АПИ-шные ф-ции, аргументом для которых является хендл. Вот такую подлянку сам уже хрен обнаружишь!
|
| | |
конкретно activeX бажит то мелко, то крупно всё время жизни ie. Помню косяки даже в третьей версии. Я к тому, что дело не в ос напрямую, а в продукте-браузере и древнейшем косяке. 01.05.14 03:47
Автор: kstati <Евгений Борисов> Статус: Elderman
|
|
|