информационная безопасность
без паники и всерьез
 подробно о проекте
Rambler's Top100Все любят медСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Простое пробивание рабочего/провайдерского... 
 400 уязвимостей в процессорах Snapdragon 
 Яндекс неуклюже оправдался за установку... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / блог / архив / 2005
АРХИВ
архив
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011
2010
2009
2008
2007
2006
2005
2004
2003
2002
archive




Paragon Partition Manager 7.0

14.06.05 21:49
14.06.05 21:49 // оригинал
При переходе на последний Stingray огреб пока не слишком понятный чудный глюк. За всю свою программистскую жизнь я видел их много, но на такое еще не напарывался. Интересно, сколько бы я его отлавливал лет так десять назад. Сейчас же тупиковые варианты отсеялись довольно быстро - и то большая часть времени ушла на продирание глаз, которым не хотелось верить.

Библиотечная функция вызывает мою виртуальную функцию, передавая ей указатель на некоторую здоровую структуру. Чуть попозже моя функция передает элемент этой структуры библиотечной функции, которая при этом успешно наворачивается. Просматривание Call stack приводит к неожиданному результату:
//bugtraq.ru/files/gluk.gif
А именно, при переходе от моей функции к библиотечной четко видно, как запарывается кусок структуры - при том, что указатель один и тот же, и он всего лишь передан из одной функции в другую. Будь память выделена на стеке, было бы более-менее понятно, куда копать, тут же какие-то полные чудеса - в зависимости от того, откуда смотрим на кусок памяти, он выглядит по-разному. Все, конечно, усугубляется тем, что и библиотека в dll, и моя функция в dll, но предыдущей версии библиотеки это особо не мешало.
Максимум, что пока приходит в голову, - что при сборке библиотеки и моего кода каким-то чудом вылезли какие-то одноименные подструктуры разного размера, что и сдвинуло все данные, но пока ничего похожего не нашел.

Update: очень перспективно выглядит структура tagLVITEMA, ровно после которой все накрывается - ее состав зависит от значения _WIN32_WINNT, а уж оно запросто могло быть разным. Ну хоть какая-то надежда...

Update 2: ну так и есть, два основных модуля системы начали делаться в такие лохматые времена, что в хедерах не было даже слов про _WIN32_WINNT (работает себе и работает, на фига трогать), которое уже давно при генерировании новых проектов устанавливается в 0х400 (как и в Stingray). А при его отсутствии срабатывает следующий чудный кусок кода из стандартных хедеров:
#ifndef _WIN32_WINNT
#ifdef WINVER
#define _WIN32_WINNT WINVER
#else
#pragma message("_WIN32_WINNT not defined. Defaulting to 0x0501 (Windows XP and Windows .NET Server)")
#define _WIN32_WINNT 0x0501
#endif

tagLVITEMA же определена так:

typedef struct tagLVITEMA
{
UINT mask;
int iItem;
int iSubItem;
UINT state;
UINT stateMask;
LPSTR pszText;
int cchTextMax;
int iImage;
LPARAM lParam;
#if (_WIN32_IE >= 0x0300)
int iIndent;
#endif
#if (_WIN32_WINNT >= 0x501)
int iGroupId;
UINT cColumns; // tile view columns
PUINT puColumns;
#endif

} LVITEMA, *LPLVITEMA;

В результате вызываемая функция считала, что в структуре на три поля больше, чем ей реально передавалось, и все работало с баальшими нюансами (самое забавное, что иногда таки запускалось и почти нормально жило).

   
обсудить  |  все отзывы (0)  |  обсудить в LJ [397]
назад «  » вперед

последние записи
яблочноучебное // 11.09.20 18:34
яблочнопереключальное // 26.07.20 17:07
яблочноденежное // 14.07.20 23:06
яблочноотличное // 14.07.20 15:37
памятное // 18.06.20 00:59
ГПБ vs TV // 06.06.20 21:32
викиисключительное // 20.05.20 21:20
гуглемитное-2 // 14.04.20 16:01
гуглемитное // 10.04.20 12:12
микрофонное // 27.03.20 17:49


авто венгрия вырвиглаз германия глюки греция гуглемап драйверы египет железки журнализм империя добра испания италия кино кипр клоуны книги криворучки оспорт португалия программизм сайт софт стрим студень турция уродцы фото франция цацки чехия читалки android bq e51 eeepc from facebook hd2 hpc htc ipad iphone onlime vista windows 10 windows 7 windows 8 yota



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



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