Господа, SEN, наконец-то, сподобился задумать интерфейс плагинов в HIEW. Здесь хотелось бы выслушать ваши мнения и предложения по поводу того, какие API функции предоставлять программисту, как это делать и т.п. Автор - SEN - читает этот топ, так что ваши драгоценные мнения не уйдут в пустоту. Как по мне - дык такой интерфейсик бы отнюдь хьюву не помешал бы. Слушаем вас.
Хочу как в фаре - чтобы не только hiew рулил плагинами, но и сам плагин мог вызывать сервисы hiew и фактически мог бы ими сделать все что угодно (вывести навороченный диалог, порисовать в консоли, перехватить клавишу, поставить в какое-то меню hiew доп. пункт...). Расплывчато конечно...
Пакетная обработка файлов, например. То есть, как в Maple, есть интерфейс для расширения её функций, а есть интерфейс для управления ей.
Hiew меня очень устраивает, особенно 7.01. Если же говорить о плагинах, то я бы хотел, чтобы была возможность по своему отображать данные.
совсем навороченным plugin-interface конечно не будет но что-то извне делать можно будет. какая информация может потребоваться плагину ? ну имя файла, текущее смещение, размер файла,блок:размер, начало, конец - а что еще ? например меня попросили сделать вызов внешней dll, которая бы считала CRC выделенного в hiew блока так как считала нужной (каламбур-с!), сразу понятно что надо передавать той dll. может кто-нибудь уже задумывался над этим вопросом _под_конкретную_ задачу, а не абстрактно "вот хорошо бы если бы...". насчет , и это малость не то. тут надо чтобы внешний модуль смог пользоваться всем I/O через хиев, а это весьма проблематично, легче отдельный модуль для этого нарисовать.
volodya, sen Ну, нерасплывчато можно посмотреть sdk фара как пример, хоть прикладухи разные - идеалогия одинаковая. Кое-что из желаймой функцианальности я перечислил: Можно еще добавить доступ во внутренние структуры hiew, какие именно без сорсов судить сложно, но ясно что в недра дизассемблера и UI. Если попробовать придумать конкретный пример... Ну.. скажем просчет хэшей выделенного блока: по хоткею или пункту меню, которые я добавил в иницализации плагина срабатывает моя функция, я в ней вызываю сервис hiew для вывода навороченного диалога(какой хэш, как выводить результаты), потом лезу в структуры hiew(ессно безопасным способом, типа вызываю pPlgAPI->fillViewerStateStc(viewStc *pVS)) смарю какой блок выделен, считаю запрашиваемый хэш, вызываю что-то вроде встроенного MessageBox и вывожу результаты в требуемом виде.
Можно еще добавить доступ во внутренние структуры hiew, какие именно без сорсов судить сложно, но ясно что в недра дизассемблера и UI. Я тоже придумал конкретный пример. Ассемблерный поиск по шаблону в HIEW. Больше так не умеет никто. Так вот, делаем API к этой функции. API возвращает нечто вроде односвязного списка с адресами, где нашла вхождения. Я хотел бы видеть API вокруг всего, что в HIEW можно сделать руками. API на поиск, на падч, на дизассемблер региона и т.п.
Вот пару более-менее коткретных идей. Хотелось бы написать plugin который в состоянии: -- imports/exports: что бы поддерживал всякие bound imports etc, добавлял и убирал модули и вукции. -- section resizing: что бы мог подвигать секции, добавить, убрать.
...инрересен вот какой аспект - какого уровня делать plugin API: low: ReadByte(), WriteByte() etc high: AddSection(), RemoveSection() или где-то по середине. IMHO, единственно правильного решения сдесь нету, т.к. всё зависит от задачи. (то есть низко-уровневый api необходим для, например, быстрого и мелкого патча, а секцию вставлять таким образом запариться можно) Поэтому предложение: сам родной hiew api должен быть как можно ниже уровнем, но дожен позволять использовать посторонние модули, которые со временем, будут написанны пользователями. То есть, я бы хотел увидеть, скажем, SectionManagement модуль (написанный с hiew api) c помощью которого я бы написал InjectSection plugin который засасывает код из .obj файла. В общем, хорошо бы было если hiew api будет базой, на которой построится пирамида plugins.
это не апи, это как раз те данные которые тебе можно передать чтобы ты с ними что-нибудь сделал Сложность вот в чем: если плагину надо что-то выводить на экран и что-то просить у пользователя то плагин должен иметь интерфейс к визуализатору хиева а он не совсем простой и слегка запутанный за 14 лет постоянных дописываний и переписываний. Форм экранных как таковых в хиеве нет, чтобы плагину спросить три числа надо либо три раза окошко GetString звать либо плагин должен аналог командной строки разбирать типа "a=5, b=1234567, c=-10".... вообщем в 7.10 плагинов не будет а дальше бум думать что с экранным интерфейсом делать.
А если ближе к конкретике, на примере потенциального плагина? Вот чего мне всегда в hiew не хватало, так это возможности сохранять выделенный блок, не только как binary, но и в текстовых форматах (массив байтов, слов, двойных слов) с заданием количества элементов в строке. Для этого можно было бы навернуть файл конфигурации шаблонов где описывать группы правил (endian, префиксы типа 0x, постфиксы типа h, символы переноса строк и т.п. чтобы на выходе можно было получать С-массив, asm-массив, pascal массив, данные в виде \x00 и т.п.) с именами по которым их можно выбирать при экспорте данных. Внешних утилит для этого конечно навалом, но в комплекте с hiew это имхо смотрелось бы очень гармонично. И идеальная задача для плагина, если уж уважаемому автору с этой идеей будет лень возиться. По части интерфейса, если задавать минимальные вопросы - выбор шаблона из списка, задание количества элементов строки, выбор endian - отдельными окнами будет крайне неудобно выбирать.
Не надо никаких плагинов. SEN - ты лучший фильтр. Продолжай писать для себя, а не для народа, т.е. только для того народа которому нужно тоже что и тебе. А то получится как у Крылова в басне про художника. Что нужно так руководство по Hiew для чайников. То что писал Крыс, но ещё подробней и почищенное от глюков. После прочтения подобного минимум половина желаний отпадёт. Не надо второго Фара, пожалуйста.
>>Не надо никаких плагинов. надо-ж, точно тоже хотел сказать, да убоялся дабавлять клёвые функи понемногу и фсё.
> Не надо второго Фара, пожалуйста. Точно. Лучше бы HiEW стал наконец-то GUI'вым, пора уходить от наследия DOS.
Меня консольный устраивает больше. Читать\анилизировать удобней и в полноэкранном режиме намного быстрей перерисовывается.
для плагина - да, хороший пример не совсем понял, какими отдельными окнами неудобно выбирать ? можно просто отдать выбор в _одно_ фиксированное меню из N пунктов, а если плагин не ленивый то может строку параметров спросить и разобрать типа: 'elementsPerLine=16 endian=little type=c arrayName=massive file=inc.h'
дааа, описалово подробное надо бы, я сам уже многих возможностей не помню, пока в исходники не посмотрю. Пришлось даже хелп написать наиподробнейший почти по всем окошкам
наследие DOS - это ограничения по памяти в первую очередь. а GUI будет не 300к как сейчас и функциональности ничуть не добавит. Разница какая - жать мышкой на мелкую иконку и по меню рыскать либо ткнуть одну кнопку (или две - сначала Ф1 )