Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[PluginRequest] WDX для подсветки исполняемых файлов .net
Goto page 1, 2, 3, 4  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sat Sep 14, 2013 01:06    Post subject: [PluginRequest] WDX для подсветки исполняемых файлов .net Reply with quote

Уважаемые программисты, насколько трудно написать wdx плагин, определяющий, является ли исполняемый файл дотнетовским? Логика работы примерно такая:
// возвращаемое поле, например, PEType
если (первые два байта - MZ) то {
если (файл содержит текст "mscoree.dll") то {
возвращаем "dotNet"
} иначе возвращаем "Win32/64"
} иначе пропускаем (возвращаем пустую строку)

А если он ещё и x64 от x32 отличить сумеет - цены ему не будет.
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Sat Sep 14, 2013 11:44    Post subject: Reply with quote

Думаю, это можно сделать даже на script_wdx. Формат PE довольно простой, можно найти секцию импортов и поискать там mscoree.dll, чтобы весь файл не шерстить. Уточни, в чём именно у тебя тут был затык.

Насчёт 32/64: а разве .NET поддерживает спец-сборку под 64 бита? Вроде бы, с точки зрения PE-формата он остаётся 32-битным.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sat Sep 14, 2013 13:52    Post subject: Reply with quote

CaptainFlint wrote:
Думаю, это можно сделать даже на script_wdx.
На счёт скриптовых технологий есть опасение по части тормозов, а не хотелось бы.
CaptainFlint wrote:
Формат PE довольно простой, можно найти секцию импортов и поискать там mscoree.dll, чтобы весь файл не шерстить.
Не специалист, но визуально (в hex) эта библиотека упомянута несколько отдельно, это может оказаться не секция импортов.
CaptainFlint wrote:
Уточни, в чём именно у тебя тут был затык.
Не понял, что надо уточнить. По предложенным плагинам я отписался. Болванку скрипта вчера пробовал сделать, но не дождался, когда он отработает на папке ~60Mb, прибил. Текущую проблему решить можно, если запустить на ночь, а как рабочий инструмент...
CaptainFlint wrote:
Насчёт 32/64: а разве .NET поддерживает спец-сборку под 64 бита?
Не-не-не, я имел в виду следующие варианты экспертных заключений плагина: dotNet, Win32, Win64, noPE. Возвращаемые значения значения не имеют ( Very Happy ), хоть 1-2-3-4. Лишь бы можно было различить.
Back to top
View user's profile Send private message
Alextp



Joined: 06 Feb 2005
Posts: 4957

Post (Separately) Posted: Sat Sep 14, 2013 16:10    Post subject: Reply with quote

Попробуй написать автору http://wincmd.ru/plugring/peviewer.html
- для него сделать Wdx plugin не трудно?
_________________
UniViewer - CudaText - LogViewer
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sat Sep 14, 2013 16:22    Post subject: Reply with quote

Alextp
Вариант. Но ещё немного подожду. Может, кто создаст нечто маленькое и шустрое, а то PE Viewer слегка избыточен для этой цели.
Может, я не прав, но логичнее было бы добавить такой функционал в UnicodeTest/LockedTest Smile
Back to top
View user's profile Send private message
Alextp



Joined: 06 Feb 2005
Posts: 4957

Post (Separately) Posted: Sat Sep 14, 2013 16:25    Post subject: Reply with quote

Почему логичнее. нет не логичнее. Он не предназначен для рзбора форматов файлов
И я не знаю, как это делать
_________________
UniViewer - CudaText - LogViewer
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sat Sep 14, 2013 17:01    Post subject: Reply with quote

Alextp
Логика такая:
  1. Ваш плагин предназначен не столько для показа какой-то информации, сколько для детектирования файлов, удовлетворяющих определённому условию.
  2. Основной способ использования Вашего плагина - раскраска файлов и поиск с плагинами, а не создание колонок.
  3. Группы файлов "занят" и "юникодные" логически не особо связаны друг с другом.
Вот я и подумал, что добавить в него распознование ещё одной-двух групп файлов было бы логично, но нет - так нет.

Добавлено спустя 5 минут:

К тому же, Ваш плагин маленький и шустрый.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Sep 14, 2013 17:41    Post subject: Reply with quote

CaptainFlint wrote:
Думаю, это можно сделать даже на script_wdx. Формат PE довольно простой, можно найти секцию импортов и поискать там mscoree.dll
А как эту секцию предлагается искать скриптом?

Serge Yolkin wrote:
раскраска файлов и поиск с плагинами, а не создание колонок.
Весьма сомнительная оценка необходимости действий контентного плагина. Не вижу смысла таким способом окрашивать файлы. Колонки наравне со всплывающими подсказками, по мне, - самое что ни на есть очевидное для использования подобных инфоплагинов.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Sat Sep 14, 2013 17:55    Post subject: Reply with quote

Если собрать в виде экзешника это, можно будет скрипту скармливать...
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Sat Sep 14, 2013 19:48    Post subject: Reply with quote

Serge Yolkin wrote:
Не специалист, но визуально (в hex) эта библиотека упомянута несколько отдельно, это может оказаться не секция импортов.

Вики:
Quote:
In a .NET executable, the PE code section contains a stub that invokes the CLR virtual machine startup entry


Serge Yolkin wrote:
Не понял, что надо уточнить.

Я имел в виду фразу:
Quote:
Вроде, там после заголовка exe ещё заголовок среды исполнения идти должен, только визуально я его не распознал. Скрипт бы написал, и дело с концом.

Там не надо ничего визуально распознавать. Надо просто посмотреть определения заголовков и пройти по цепочке смещений внутри EXE-файла. Соответственно, скриптом это делается не сложнее, чем плагином.

Serge Yolkin wrote:
Не-не-не, я имел в виду следующие варианты экспертных заключений плагина: dotNet, Win32, Win64, noPE.

А, понятно. Ну, битность можно ExeFormat'ом различать. Впрочем, если писать плагин или скрипт с самостоятельным разбором заголовков, то добавить определение архитектуры очень просто.


Flasher wrote:
А как эту секцию предлагается искать скриптом?

Я говорил не про самостоятельный скрипт, а про script_wdx. Искать так же, как и не-скриптовым плагином: считать заголовки файла, разобрать их и считать из файла данные по найденным смещениям.

Я, к сожалению, не помню структуру PE настолько подробно, чтобы сходу выложить готовую цепочку переходов, но в интернете информации полно, в том числе с примерами кода.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Sep 14, 2013 19:55    Post subject: Reply with quote

CaptainFlint wrote:
Я говорил не про самостоятельный скрипт, а про script_wdx.
Плагин сам ничего искать не может. Он только подхватывает имена файлов и возвращает полученные скриптом значения.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Sat Sep 14, 2013 20:08    Post subject: Reply with quote

Flasher wrote:
Плагин сам ничего искать не может. Он только подхватывает имена файлов и возвращает полученные скриптом значения.

Ну да. И вот этот скрипт, который запускается плагином, пусть выполняет всю работу по открытию файла и чтению нужных байтиков.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Sep 14, 2013 20:11    Post subject: Reply with quote

CaptainFlint wrote:
пусть выполняет всю работу по открытию файла и чтению нужных байтиков.
Так в этом-то и суть вопроса была, чтобы понять, откуда мысль родилась:
CaptainFlint wrote:
скриптом это делается не сложнее, чем плагином
Для поиска секций, как я понимаю, используются специальные API-функции, к которым без сторонних средств не подберёшься.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sat Sep 14, 2013 20:23    Post subject: Reply with quote

MVV
Код по приведенной Вами ссылке тоже дотнетовский. Не то, чтобы фатально, но крайне нежелательно.

Зато там заголовок довольно подробно описан:
Quote:
Структура PE содержит заголовки разделов данных. PE заголовки содержат заголовки NT (IMAGE_NT_HEADERS в WinNT.h), в которых инкапсулированы необязательные заголовки (IMAGE_OPTIONAL_HEADER в WinNT.h). Необязательный заголовок имеет массив записей IMAGE_DATA_DIRECTORY, называется DataDirectory. Запись IMAGE_DATA_DIRECTORY указывает фактическое расположение данных в PE-файле (так называемый модуль загрузки). Запись, в которой вы заинтересованы является индексом IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR. Эта запись указывает на данные .NET. Если эта запись существует и поле VirtualAddress указывает на действительную область в рамках одной из последующих секций, это означает, что компонент является управляемым.
и картинка есть Smile

Добавлено спустя 13 минут:

CaptainFlint wrote:
пусть выполняет всю работу по открытию файла и чтению нужных байтиков.
Serge Yolkin wrote:
Болванку скрипта вчера пробовал сделать, но не дождался, когда он отработает на папке ~60Mb, прибил.
"распространять в комплекте с седуксеном..."
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6151
Location: Москва

Post (Separately) Posted: Sat Sep 14, 2013 20:43    Post subject: Reply with quote

Flasher wrote:
Для поиска секций, как я понимаю, используются специальные API-функции, к которым без сторонних средств не подберёшься.

Нет, никаких API нет. Вернее, может, и есть, но я о них не слышал. Обычно PE-формат разбирается вручную, структура заголовков документирована. Просто считывается блок данных фиксированного размера, по определённому смещению из него берётся число, это число задаёт новое смещение внутри файла для следующего заголовка и т.д.

Serge Yolkin wrote:
Болванку скрипта вчера пробовал сделать, но не дождался, когда он отработает на папке ~60Mb, прибил.

Если болванка скрипта выполняла тупой поиск подстроки во всём содержимом файла, то, разумеется, будет тормозить. Я потому и говорю про чтение и разбор заголовков, чтобы сразу прыгать на нужное смещение, а не перебирать весь двоичный мусор (в котором, к тому же, могут найтись сигнальные строки и дать ложное срабатывание).
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3, 4  Next
Page 1 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group