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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2009, 13:38   #1
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию Как определить является ли файл исполняемым?

Собственно нужно написать программу, которая при запуске в текущей папке удаляла все неисполняемые файлы и оставляла исполняемые. Как можно определить является ли файл исполняемым, что с чем нужно сравнить? Или где это у него [файла] можно посмотреть?
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 01.10.2009, 13:46   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

По расширению. Exe, bat, com(мот еще какие) оставить, а остальные удаляй.
Hollander вне форума Ответить с цитированием
Старый 01.10.2009, 13:53   #3
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

любой исполняемый файл начинается с MZ-заголовка (исторически сложилось еще с DOS-времён) дальше могут быть PE, NE, CLR-заголовки...

Нужно открыть файл в бинарном режиме, прочитать блок данных (структуры можно найти в гоогле) и распарсить его

Сейчас разбираюсь с этим
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 01.10.2009, 14:28   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что ты называешь исполняемым файлом?
Например OCF исполняемый.

Цитата:
любой исполняемый файл начинается с MZ-заголовка
Нет не любой. Есть куча систем исполняемых файлов с другими структурами.
В таком случае автору стоит указать среду исполнения (или операционку)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.10.2009, 14:52   #5
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Windows XP.

Предыдущий коммент - цитата с другого форума.

К тому, что по расширению определять исполняемые файлы - плохой вариант.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 01.10.2009, 15:38   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
по расширению определять исполняемые файлы - плохой вариант.
Верно. Ну тогда PE заголовок определяй.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.10.2009, 17:26   #7
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Если dll не должны в ходить в число исполняемых, нужно смотреть и по расширению, и по заголовку MZ.
ds.Dante вне форума Ответить с цитированием
Старый 02.10.2009, 14:21   #8
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

IsPEFile проверяет, является ли файл исполнимым в формате PE. Если это так, то результатом работы функции будет TRUE. Посмотрим на код этой функции:

Код:
BOOL CPEFile::IsPEFile(VOID)

{

DWORD tmp;

m_hPEFile.SeekToBegin();

m_hPEFile.Read(&DOSHdr, sizeof(DOSHeader));

if(DOSHdr.Signature != MZ_SIGN) return FALSE;

dwOffsetToPEhdr = DOSHdr.OffsetToPEHeader;

m_hPEFile.Seek(dwOffsetToPEhdr, CFile::begin);

m_hPEFile.Read(&tmp, sizeof(DWORD));

if(tmp != PE_SIGN) return FALSE;

return TRUE;

}
http://www.xakep.ru/magazine/xa/105/112/1.asp
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить, является ли матрица магическим квадратом. drakon803 Помощь студентам 11 14.12.2011 14:29
По введенному номеру билета определить, является ли билет счастливым. veter_s_morya Паскаль, Turbo Pascal, PascalABC.NET 26 14.06.2011 20:39
Определить является ли данное число совершенным.. Паскаль. Karabas Помощь студентам 6 23.12.2008 21:53
определить является ли четырехугольник квадратом Ntfser Общие вопросы Delphi 2 18.10.2008 16:48
Определить, является ли заданная строка правильной записью вещественного числа Sergik1977 Паскаль, Turbo Pascal, PascalABC.NET 2 18.10.2007 16:53