информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыСтрашный баг в WindowsПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Может в синхронизации проблемма и заключается... 22.06.04 08:27  Число просмотров: 1473
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> А как же Access violation'ы всяческие при обращении к левым
> адресам? А насчет вылета "молча" то полагаю у автора поста
> либо чтото с синхронизацией не в порядке либо проблемы с
> обращением к структурам не выделяемым в динамической памяти
> (запись 1000 байт в char[999] например Ж)).
>
> Кстати еще - это там случайно не библиотека писанная на
> билдере и вызываемая из другой программы из потоков? В этом
> случае надо написать в начале функции DllMain:
> IsMultiThread=true;

Библиотек нету...
И к структурам с невыделеной памятью тоже не обращается, так бы CodeGuard выдал сообщение о неверном обращении...
Допускаю, что проблемма в синхронизации, но как тогда это отследить, убедиться в этом на все 100% ?
<programming>
[C++] Программа вылетает, но не разберусь из-за чего... 21.06.04 20:26  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Программа вылетает не в определённом месте, а непонятно где, точнее вылетает не постоянно, а то вылетает то нет...
Сама программа написана в билдере 6.0. При работе с СодеГуардом, ошибок нет. Покрайней мере не выдаёт никаких сообщений. Программа часто использует динамическую память.
Ещё в программе используется дополнительный поток, создаётся стандартными билдеровскими средствами, через класс TTread. Не может быть такого, что программа вылетает из-за асинхронизации в некоторых случаях работы. Идёт обращение к СОМ-порту, но только из даполнительного потока, главный поток работает только с интерфейсом...

Тестировал долго, на одном и том же месте программа то вылетает то нет....
А вообще были случаи, что в процесе отладки сам билдер выкидывал сообщения о ошибках связаных с использованием потока, но после продолжения работы, программа работала...
[C++] Страничное нарушение. 22.06.04 03:39  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
При переполнении выделенного буфера в динамической памяти Мастдай приспокойно выделяет следующую страницу, но при этом, он не помечает ее, как связанную, где-то "у себя в бошке". При следующем (нормальном) запросе на выделение памяти он приспокойно пытается выделить ту же страницу и обнаруживает, что она занята: крах. PAGE_FAULT_ERROR

Происходит это, естессно не в момент переполнения, а в любой момент выделения памяти после того.
[C++] Не совсем так 22.06.04 12:24  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> При переполнении выделенного буфера в динамической памяти
> Мастдай приспокойно выделяет следующую страницу, но при
> этом, он не помечает ее, как связанную, где-то "у себя в
> бошке". При следующем (нормальном) запросе на выделение
> памяти он приспокойно пытается выделить ту же страницу и
> обнаруживает, что она занята: крах. PAGE_FAULT_ERROR
Мастдай не выделяет, а там находятся управляющие структуры кучи. Если запороть кучу, то продолжать с ней работать можно, а когда происходит следующее обращение, то по указателю в разрушенной куче винда может обратиться куда угодно. И вот тогда то слетает по #PF.

> Происходит это, естессно не в момент переполнения, а в
> любой момент выделения памяти после того.
А откуда такие сведения о личной жизни виндов?) 22.06.04 04:23  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
> При переполнении выделенного буфера в динамической памяти
> Мастдай приспокойно выделяет следующую страницу, но при
> этом, он не помечает ее, как связанную, где-то "у себя в
> бошке". При следующем (нормальном) запросе на выделение
> памяти он приспокойно пытается выделить ту же страницу и
> обнаруживает, что она занята: крах. PAGE_FAULT_ERROR
> Происходит это, естессно не в момент переполнения, а в
> любой момент выделения памяти после того.

А как же Access violation'ы всяческие при обращении к левым адресам? А насчет вылета "молча" то полагаю у автора поста либо чтото с синхронизацией не в порядке либо проблемы с обращением к структурам не выделяемым в динамической памяти (запись 1000 байт в char[999] например Ж)).

Кстати еще - это там случайно не библиотека писанная на билдере и вызываемая из другой программы из потоков? В этом случае надо написать в начале функции DllMain: IsMultiThread=true;
Может в синхронизации проблемма и заключается... 22.06.04 08:27  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> А как же Access violation'ы всяческие при обращении к левым
> адресам? А насчет вылета "молча" то полагаю у автора поста
> либо чтото с синхронизацией не в порядке либо проблемы с
> обращением к структурам не выделяемым в динамической памяти
> (запись 1000 байт в char[999] например Ж)).
>
> Кстати еще - это там случайно не библиотека писанная на
> билдере и вызываемая из другой программы из потоков? В этом
> случае надо написать в начале функции DllMain:
> IsMultiThread=true;

Библиотек нету...
И к структурам с невыделеной памятью тоже не обращается, так бы CodeGuard выдал сообщение о неверном обращении...
Допускаю, что проблемма в синхронизации, но как тогда это отследить, убедиться в этом на все 100% ?
Дык, с какой ошибкой вылетает-то? 23.06.04 04:50  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
CodeGuard не скажет тебе если у тя в ReadFile каком нить за... 22.06.04 14:35  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
> Библиотек нету...
> И к структурам с невыделеной памятью тоже не обращается,
> так бы CodeGuard выдал сообщение о неверном обращении...
> Допускаю, что проблемма в синхронизации, но как тогда это
> отследить, убедиться в этом на все 100% ?
CodeGuard не скажет тебе если у тя в ReadFile каком нить за буфер вылезет. Потому что он только Сшные функции отслеживает (memcpy там всякие). Про АПИ он ниче не знает потому некорректные обращения в АПИ просто не заметит.
посмотри дебагером например SofIce 21.06.04 21:57  
Автор: choor Статус: Elderman
<"чистая" ссылка>
Изначально загрузи SymbolLoader'ом
Сделай трейс по шагу и увидишь как и что у тебя происходит, на каком моменте что вылетает.
P.S. следи за регистрами
Думаю пошаговый трейс будет работать нормально 22.06.04 12:28  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Потому как проблемы скорее всего в рассинхронизации потоков.
Лучше загрузить сайс и дождаться фаулта - винда сразу вывалится в сайс. После этого смотреть на состояние программы (стек, переменные и пр).

А еще лучше наставить OutputDebugString-ов с выводом всей более-менее серьезной инфы (вход/выход в функции, передаваемые параметры, возвращаемые значения, вывод в контрольных точках), причем особое внимание уделять состоянию указателей. Далее по полученному логу можно довольно точно восстановить причину краха.
Пошаговый трейс работает нормально 22.06.04 13:41  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Программа не вываливается при пошаговом трейсинге. Более того вываливается в процессе некоторой работы, причём ситуация вроде нормально обрабатывается (при пошаговом трейсинге всё работает как надо), но иногда происходит вылет...
Вот я и говорю, делай дебаг-лог 22.06.04 14:26  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Чем подробнее, тем легче будет выловить ошибку.

Анализ переменных в точке вылета тоже иногда помогает, но не всегда понятно почему к примеру в данном конкретном указателе сейчас содержится мусор
Почему исходник никто не показывает... 21.06.04 21:08  
Автор: zonny <Sasha> Статус: Member
<"чистая" ссылка>
исправь сабж
Тык их много... 22.06.04 00:22  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach