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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
А так: 09.03.04 15:30  Число просмотров: 827
Автор: lunc <Alexander Krizhanovsky> Статус: Member
Отредактировано 09.03.04 15:32  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
А так:

close (1);
int fd = open ("you_file_name", O_CREAT | O_RDONLY);
<programming>
[ASM] Возможно ли заставить конслольную прогу перенаправлять вывод в файл? 08.03.04 15:53  
Автор: Den <Denis> Статус: The Elderman
Отредактировано 17.03.04 21:32  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
Конслольная программа для вывода на экран использует функцию Win32API WriteConsole и открывает только хэндл STD_OUTPUT_HANDLE.

При выполнении из командной строки
myprog.exe > myprog.txt
файл myprog.txt создается, но пустой.
Как побороть, кто знает?
[ASM] У меня получилось!!! 17.03.04 21:31  
Автор: Den <Denis> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Если получать хендл консли через GetStdHandle(STD_OUTPUT_HANDLE), а выводить в конслоль через WriteConsole, то в случае стандартного перенаправления вывода в файл информация не появиться ни в файле, ни на экране.

Если получать хендл консоли через CreateFile("CONOUT$", ...), а в выводить в консоль через WriteFile(...), то вывод всегда будет идти только на экран даже при перенаправлении в файл. Файл при этом будет пустой

А вот если получать хендл консоли через GetStdHandle(STD_OUTPUT_HANDLE), а выводить в конслоль через WriteFile, то получаем необходимый результат.

С точки зрения порядка реализации HandleX был абсолютно прав, но таблицу импорта не патчил - поправил исходник.

Thanx всем откликнувшимся!
Кстати винда любит кэшировать такой вывод. Кэширование... 09.03.04 15:56  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
Кстати винда любит кэшировать такой вывод. Кэширование выражается в том что реально запись в файл происходит весьма редко - не то по достижении некоего порогового количества данных не то через определенный интервал времени, но скорее всего и то и другое. А до этого данные висят хз где. Причем если прервать выполнение проги по Ctrl+C нифига из кэша в файл не падает. Те ни в консоль ни в файл ниче не пишется.
Предлагаешь?: 09.03.04 16:13  
Автор: Den <Denis> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Попробовать используя CreateFile("CONOUT$"...) выводить на консоль через хендлы файлов и сделать flush?
Хм. похоже через WriteConsole вообще так не сделашь 09.03.04 17:07  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
придется юзать WriteFile как уже предлагали тут. Потому что в мсдн написано
WriteConsole fails if used with a standard handle that has been redirected to be something other than a console handle.
Ясно. Мысль понята. Спасибо! 09.03.04 17:11  
Автор: Den <Denis> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Но закрывать обсуждение не буду пока не решу проблему.
Дык вот я и говорю — пропач импорт! 10 байт меняешь и вуаля! ;-) 09.03.04 19:25  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Если есть исходник зачем патчить таблицу импорта? ;) 09.03.04 19:37  
Автор: Den <Denis> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Во мля... Просто у меня в голове не уложилось, что у человека есть исходник, а он мозги людям компОзит ;-) 10.03.04 10:28  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Вообще при корректном выходе из проги без Ctrl+C все в файл сохраняется. 09.03.04 16:28  
Автор: Killer{R} <Dmitry> Статус: Elderman
Отредактировано 09.03.04 16:30  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
Насчет выхода по ExitProcess не знаю. Вообще самый корректный выход - выход из main.
Подробнее? 09.03.04 15:48  
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
> Конслольная программа для вывода на экран использует
> функцию Win32API WriteConsole и открывает только хэндл
> STD_OUTPUT_HANDLE.
>
> При выполнении из командной строки
> myprog.exe > myprog.txt
> файл myprog.txt создается, но пустой.

А вывод на экран происходит?
Подробнее:) 09.03.04 16:09  
Автор: Den <Denis> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
> А вывод на экран происходит?
Нет.
А так: 09.03.04 15:30  
Автор: lunc <Alexander Krizhanovsky> Статус: Member
Отредактировано 09.03.04 15:32  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
А так:

close (1);
int fd = open ("you_file_name", O_CREAT | O_RDONLY);
Первое, что приходит в голову — пропатчить таблицу импорта WriteConsole на WriteFile, по параметрам они совпадают... 09.03.04 07:02  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Не то. 09.03.04 15:26  
Автор: Den <Denis> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Прога должна выводить на экран, но если я запускаю ее из командной строки: myprog.exe > myprog.txt
то должно срабатывать перенаправление стандартного вывода системой в файл myprog.txt, например как это происходит с командой ping:
ping -? > c:\ping.txt
1




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


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