Blog. Just Blog

Запуск процессов с командой перенаправления вывода

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Для перенаправления ввода и вывода консольных приложений используются специальные символы командной строки "<", ">" и "|". Например:

tree c:\windows > out.txt
В этом случае вывод команды tree вполне ожидаемо будет сохранен в файл out.txt. Но если попытаться выполнить эту же команду средствами WinAPI, например, через функции WinExec, CreateProcess или ShellExecute(Ex), то нужного результата достигнуто не будет. Дело в том, что перенаправление обрабатывается только командным процессором, а функции WinAPI просто передают командную строку в неизменном виде, то есть программе "tree" будут переданы параметры "c:\windows > out.txt". В большинстве случаев они окажутся просто некорректными с точки зрения программы, а могут привести к неожиданным результатам.
  1.         ; Выполнить напрямую команду с перенаправлением
  2.         invoke  WinExec,exec_re,SW_SHOW
  3.         ...
  4.         ...
  5. exec_re  db 'c:\Windows\System32\tree.com c:\Windows\System32 >out.txt',0
Приведенный выше код выполнится без ошибок (имеется в виду код возврата WinExec), но при этом никакого файла с листингом создано не будет.

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

cmd.exe /c tree c:\windows > out.txt
Хорошим тоном будет сперва узнать, где в системе обитает командный процессор. Сделать это можно, получив значение переменной окружения COMSPEC.
  1.         ; Получить переменную окружения COMSPEC
  2.         ; со ссылкой на командный процессор
  3.         invoke  GetEnvironmentVariable,variable,cmd,100h
  4.         ; Дописать ключ /c
  5.         invoke  lstrcat,cmd,exec_add
  6.         ; Дописать выполняемую команду с перенаправлением
  7.         invoke  lstrcat,cmd,exec_re
  8.         ; Выполнить команду через командный процессор
  9.         invoke  WinExec,cmd,SW_SHOW
  10.         ...
  11.         ...
  12. exec_re  db 'c:\Windows\System32\tree.com c:\Windows\System32 >out.txt',0
  13. exec_add db ' /c ',0
  14. variable db 'COMSPEC',0
В приложении пример программы с исходным текстом, которая отрабатывает запуск приложения различными способами с перенаправлением вывода.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

Input.Output.Redirection.Demo.zip (1,541 bytes)


Поделиться ссылкой ВКонтакте
Просмотров: 2091 | Комментариев: 3

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
dma (09.07.2019 в 11:05):
Ну еще бы ManHunter, да оказался бы не прав - прав конечно. Человек который не скрывает ни своего лица, ни страны, ни города проживания, ни горячих точек (или точки), в котороых(ой) ему довелось побывать - не может быть не правым. И самое интересное, что всем этим можно гордиться.

На меня, видимо, произвела впечатление эта тема, потому что я недавно интересовался ей, а эта ветка явилась как бы приятным бонусом к моим знаниям. Как говорится, кто предупрежден - тот вооружен. Вдруг когда-нибудь буду заниматься плотно этой темой и всплывет подобная проблема.
ManHunter (09.07.2019 в 09:51):
Это нормально. Кому-то нравится попадья, а кому-то свиной хрящик.
dma (09.07.2019 в 09:46):
ManHunter, немного не хватает вашему блогу равномерности интересов среди ваших читателей. В каких-то ветках число комментариев порой зашкаливает за сотню, а здесь ни одного. Я решил хоть как-то исправить эту несправедливость. Но вы ж понимаете, мои возможности, к сожалению (а может и к счастью :)), достаточно скромны, а так бы я с радостью организовал бы здесь сто положительных отзывов. Видимо люди не слышали о таком понятии как шеллкод, а эта ветка как бы предподготовка к нему. Я правильно мыслю или нет? :) К чему это я? К спасибе, естественно, а к чему еще. :)

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0052 сек.) / Память: 4.5 Mb
Наверх