Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2011, 02:09   #1
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию Нужны добровольцы. Тестирование кода.

Коллективный разум мне намекнул - поведение напоминает работу руткитов. Однако тестирование машины несколькими антивирусами + несколькими специализированными ищейками руткитов результата не дало.

Тем не менее, Коллективный Разум намекнул - код безопасен. Проблема не в коде.

Итак, нужны добровольцы! У кого есть windows7 - скомпилируйте и запустите данный код. Если ваша Ось упадёт с синим экраном смерти - значит проблема действительно в моём коде, а не по причине мифических вирусов.

Поведение программы должно быть следующим:
Появляется консоль без полосы прокрутки .
В самой консольке выводятся кракозябры, и ожидается ввод с клавиатуры. Вы вводите, нажимаете ентер.
Картинка тут же меняется - голый экранчик консоли, справа появляется полоса прокрутки. Консолька опять ожидает ввод.
Вводите с клавиатуры, нажимаете enter - программа тут же завершается. Окошко пропадает.

И все. Внешне кажется, что все в порядке. Запускаем программу ещё раз, и повторяем операцию. Если после второго запуска программы, ось упадёт в течении нескольких минут - значит мой код действительно ломает систему. Если все будит в порядке - значит действительно возможно у меня вирус.

Если все в порядке, но при этом во время ввода справа не появится вертикальная полоса прокрутки - значит вообще cin и WINAPI ведут себя корректно.
Код:
#include "windows.h"
#include <iostream>
#include <fcntl.h>
#include <io.h>

void Redirect_Stdout(HANDLE hTarget); 

int main()
{
    using namespace std;
    
    HANDLE hOld = GetStdHandle(STD_OUTPUT_HANDLE);
    HANDLE FirstScreenBuffer= CreateConsoleScreenBuffer(  GENERIC_READ | GENERIC_WRITE, 0,  NULL,  CONSOLE_TEXTMODE_BUFFER,  NULL  );
    SetConsoleActiveScreenBuffer(FirstScreenBuffer);
    Redirect_Stdout(FirstScreenBuffer); //подружим каут с новым выводом

    cout<< "Введите данные: "; //Теперь я вижу вывод каута

    int a;     
    cin>>a; 
    cin >>a;

}

void Redirect_Stdout(HANDLE hTarget)
{
    using namespace std;
    SetStdHandle(STD_OUTPUT_HANDLE, hTarget); 

    int hConHandle; long lStdHandle; FILE *fp;

    lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen( hConHandle, "w" );
    *stdout = *fp;
    setvbuf( stdout, NULL, _IONBF, 0 );
}
Данный код был запущен на другой машине windows7, и поведение программы было идентичным тому, что и на моей. Ось на другом компьютере так же рухнула с синим экраном смерти. Однозначно, синий экран смерти - это не проблема оборудования.

Правда наши машины довольно тесно общаются, поэтому есть риск, что оби машины заражены вирусом.

Последний раз редактировалось _Bers; 25.12.2011 в 02:14.
_Bers вне форума Ответить с цитированием
Старый 25.12.2011, 02:29   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Виртуалку, не?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 25.12.2011, 02:30   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

windows.h не в угловых скобках?
у вас WinSDK в папке с проектом?
не знаю как у вас, у меня windows.h находиться в путях компиля, и нуждается в угловых скобках.

ну у меня WinXP SP3, вылета нету.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.12.2011, 02:35   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Пепел Феникса, а вы несколько раз подряд запускайте программку. Она после первого запуска может никак не проявится (а ось рухнет через полчаса). Если запускать несколько раз - то быстро падает. Мне хватает двух раз, и через 5 минут - синий эран смерти

Справа полоса прокрутки была?
_Bers вне форума Ответить с цитированием
Старый 25.12.2011, 02:42   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

приложение вылетает после ввода Enter.

ошибка на мое мнение,вы не переправили хендл ввода, а уже пытаете ввод.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.12.2011, 02:54   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
приложение вылетает после ввода Enter.

ошибка на мое мнение,вы не переправили хендл ввода, а уже пытаете ввод.
http://programmersforum.ru/showthread.php?t=180901

конец второго поста
_Bers вне форума Ответить с цитированием
Старый 25.12.2011, 02:57   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в данном коде то нету перенаправления входного потока.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.12.2011, 03:04   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
в данном коде то нету перенаправления входного потока.
Поведение и результат один и тот же просто...
я уже не знаю что думать. Полагаю, что cin и консольное WIN API не состыкуются. Ну то есть, совместная штатная работа двух устройств приводит к крушению операционки.

Это что бы прикладная программа, пользуясь окружением согласно его интерфейсу, смогла завалить на бок всю ОС....
_Bers вне форума Ответить с цитированием
Старый 25.12.2011, 03:49   #9
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Win7 x64 Ultimate:
При запуске из под MS VS 2010 Ultimate падает при втором запуске.
При запуске екзешника (раз 7 -10) не падает, но если потом попытаться запустить студию - BSOD.
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужны маленькие примеры кода на Microsoft Visual C++ 6.0. mikityak29 Visual C++ 1 24.08.2009 00:01
Нужны добровольцы PHP-кодеры Moln Свободное общение 2 23.08.2009 07:35
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51