![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определить тип приложения [D7, Win95/98, WinME, NT4, Win2k, WinXP]
-=GaLaN=- © (2005-05-27 01:03:00)У меня есть путь к файлу exe. Как можно определить тип приложения - консольное ли оно, DOS, Win32?
Просто Джо (2005-05-27 02:30:00) [61]
> [17] Defunct © (27.05.05 02:29)
> Ну и пусть себе переключается в текстовый. Код для переключения
> в графический режим все равно в нем будет.
Какой? Может он напрямую с драйвером VESA общается с особыми изысками?
Defunct (2005-05-27 02:29:00) [62]Просто Джо © (27.05.05 02:24) [14]
Ну и пусть себе переключается в текстовый. Код для переключения в графический режим все равно в нем будет.
Просто Джо (2005-05-27 02:28:00) [63]
> [15] KilkennyCat © (27.05.05 02:27)
Да, ИИ в задаче мощный, это вам не плюшки со стола таскать (ц)
:)
KilkennyCat (2005-05-27 02:27:00) [64]
> Не туда копаете, товарищи :)
Угу. надо OCR экрана делать.
Просто Джо (2005-05-27 02:24:00) [65]Хм. А если это ДОС-приложение работает в графическом режиме, иногда переключаясь в текстовый, - то как его, простите, называть? Пример: Автокад версии 10.
Не туда копаете, товарищи :)
Defunct (2005-05-27 02:22:00) [66]-=GaLaN=- (27.05.05 02:15) [10]
> Но, согласись, отсутствие данных последовательностей вовсе не означает, что это консольное приложение?
Конечно.
Наличие данных последовательностей может быть информативным только в DOS приложениях которые переключают видеорежим, не более того. В Win32 приложении такой код будет просто неработоспособен.
Т.е. вначале нужно точно знать, что приложение - DOS. Затем, если интересует в каком режиме работает именно это DOS приложение, ищем эти последовательности. (плюс может быть ложное срабатывание, например, в программе размещены данные, которые совпадают с указанными последовательностями команд).
Просто Джо (2005-05-27 02:18:00) [67]
> [10] -=GaLaN=- (27.05.05 02:15)
А зачем это нужно, если не секрет?
Просто Джо (2005-05-27 02:16:00) [68]Угу, или такую:
xor ah,ah
-=GaLaN=- (2005-05-27 02:15:00) [69]2Defunct:
Но, согласись, отсутствие данных последовательностей вовсе не означает, что это консольное приложение? Оно вполне может оказаться обычным графическим Win32 или WinNT приложением...
Defunct (2005-05-27 02:11:00) [70]> Нужно определить, что во-первых, это приложение, а вторых, это приложение, работающее в текстовом режиме.
Можно определить наличие переключения в графический режим (в DOS приложении). Для этого придется "прошерстить" весь exe/com файл и искать последовательность команд
такую:
mov ax, zzyy; // где yy больше 3, а zz = 0
int 10h
вот как будет это выглядеть в hex:
xx xx xx xx B8 YY 00 CD 10 xx xx
на месте xx, любые числа.
или такую:
mov ah, 0
mov al, yy // где yy больше 3
...
int 10h
вот как будет это выглядеть в hex:
xx xx xx xx B4 00 B0 YY xx .... xx CD 10 xx xx
ps: чаще используется первая последовательность.
Просто Джо (2005-05-27 01:53:00) [71]
> [7] GuAV © (27.05.05 01:48)
> Изначально дос-приложение запускается в текстовом
> режиме
Ну уж нет, не обязательно. Оно запускается в том режиме, какой установлен на момент запуска.
GuAV (2005-05-27 01:48:00) [72]-=GaLaN=- (27.05.05 1:35) [6]
Не важно, DOS или Win32 Console.
DOS приложение, работающее в текстовом режиме не отличается никакими заголовками от DOS приложения, работающего в графическом режиме. Изначально дос-приложение запускается в текстовом режиме, но оно может перейти в графический.
-=GaLaN=- (2005-05-27 01:35:00) [73]Спасибо за ответы, попробую немного точнее дать задачу. Есть путь к файлу exe. Нужно определить, что во-первых, это приложение, а вторых, это приложение, работающее в текстовом режиме. Не важно, DOS или Win32 Console.
Я попробую почитать статью по вышеприведённой ссылке и разобрать в ней, но неужели нет каких-нибудь WinAPI функций? Ведь command.com и cmd.exe как-то определяют это...
KilkennyCat (2005-05-27 01:25:00) [74]И не стоит также забывать, что расширения еxe, com, bat - являются лишь информативными о запускаемости. Все остальное - согласно заголовкам, поэтому [3] Defunct © (27.05.05 01:13) - верно.
Просто Джо (2005-05-27 01:19:00) [75][3] Defunct © (27.05.05 01:13)
> Можно - необходимые и достаточные условия:
> 1. Отсутствие MS-DOS заголовка EXE файла. (COM-формат)
> 2. Отсутствие Win32 заголовка.
Да, я неудачно выразился. Не заметил, что уточняется "EXE", увидел только ключевое слово "приложение".
> > В-третьих, приложения Win32 - это и консольные приложения,
> в том числе.
Это мое замечание к тому, что автор противопоставляет консольные и Win32-приложения. В то время как консольные - это разновидность Win32-приложений.
К автору: не стоит забывать, что в файле "екзе" может также находится 16-битное приложение, приложение для OS/2 и мало ли что еще.
Defunct (2005-05-27 01:13:00) [76]Просто Джо © (27.05.05 01:09) [2]
> Во-вторых, определить, является ли оно DOS-приложением тоже нельзя.
Можно - необходимые и достаточные условия:
1. Отсутствие MS-DOS заголовка EXE файла. (COM-формат)
2. Отсутствие Win32 заголовка.
> В-третьих, приложения Win32 - это и консольные приложения, в том числе.
Тоже можно определить по заголовку, но не помню как.
Defunct (2005-05-27 01:09:00) [77]http://www.rsdn.ru/article/baseserv/peloader.xml
в этой статье можно найти краткое описание заголока PE файлов, а также список литературы, который вам не помешает.
Просто Джо (2005-05-27 01:09:00) [78]Во-первых, оно не обязано вообще быть приложением.
Во-вторых, определить, является ли оно DOS-приложением тоже нельзя.
В-третьих, приложения Win32 - это и консольные приложения, в том числе.
Ну, а если уверен, что оно точно является Win32-приложением, тогда можно попытаться прочитать PE-заголовок файла и из него определить тип приложения, там для этого предусмотрено поле. Короче говоря, ищи по ключевым словам "структура PE-заголовка".