информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Где водятся OGRыСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
А так: 09.03.04 15:30  Число просмотров: 899
Автор: 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 <Денис Т.> Статус: 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 <Денис Т.> Статус: 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 <Денис Т.> Статус: 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 <Денис Т.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Но закрывать обсуждение не буду пока не решу проблему.
Дык вот я и говорю — пропач импорт! 10 байт меняешь и вуаля! ;-) 09.03.04 19:25  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Если есть исходник зачем патчить таблицу импорта? ;) 09.03.04 19:37  
Автор: Den <Денис Т.> Статус: 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 <Денис Т.> Статус: 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 <Денис Т.> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
Прога должна выводить на экран, но если я запускаю ее из командной строки: myprog.exe > myprog.txt
то должно срабатывать перенаправление стандартного вывода системой в файл myprog.txt, например как это происходит с командой ping:
ping -? > c:\ping.txt
1




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


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