Что нового

Создаём свой Au3Stripper на AutoIt

Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
veretragna [?]
а ручками это дело пощупать можно?
Можно, прикрепил.

Мой недо-стриппер работает значительно медленнее и не совсем стабильно
Я свой на стабильность особо не поверял (ударение больше делалось на скорость), нужно ещё много тестировать, и я уверен что будут ошибки.
 

Вложения

  • A3S.zip
    8.5 КБ · Просмотры: 11

asdf8

Скриптер
Сообщения
564
Репутация
152
CreatoR [?]
Это не исключение, а использование функции/переменных.

С учетом того, что задача программы - вырезать из скрипта не используемые функции/переменные, исключение, по логике, должно обозначать что определенные функции/переменные будут исключены из процесса вырезания.


Этот список облегчает работу разработчику (как UDF, так и пользователю UDF).

Как? Разработчику вместе с UDF нужно будет выложить пояснения, чтобы пользователь нашел определенный ini-файл и внес в него определенные данные. Если пользователь получит UDF без пояснений, то ему или самому придеться разбираться и с UDF и с форматом ini-файла, или спрашивать об этом на форумах.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
CreatoR
Касательно идей:
Замена всех DllCall -> DllCallAddress. Лишний раз не придется интерпретатору бегать по таблице экспорта. Для iDll(Internal hModule Id) и pFn(Pointer to function) резервировать наиболее короткие имена переменных, их инициализацию производить в шапке. Для особых случаев можно ввести директиву, которая будет игнорировать определенные имена библиотек.

Если мне не изменяет память, то это давало ~80-100% прирост скорости в работе с DllCall(во времени вызова).
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
asdf8 [?]
В случае если разработчик UDF не указал исключения для функции используемых в функциях из списка ini.

firex [?]
Замена всех DllCall -> DllCallAddress
Идея может и хорошая, но мне для начала нужно понимать как это работает и с чем это едят. И к тому же, сейчас в приоритете стабильность и скорость работы самого стрипера :smile:.
 

asdf8

Скриптер
Сообщения
564
Репутация
152
CreatoR

С быстродействием на больших проектах пока не очень (разница с AU3Stripper больше 10 раз)
 

veretragna

Как писал, так и работает.
Сообщения
140
Репутация
10
Creator, однако, Ваш стриппер вырезал нужные функции...
Пример во вложениях.
 

Вложения

  • lbm.rar
    5.1 КБ · Просмотры: 7
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
Я пришёл к выводу, что скорость идёт за счёт стабильности.
Я могу сделать рабочую версию, но это будет оооочень медленно, я думаю тут никакие алгоритмы не помогут, нужно переносить часть очистки неиспользуемых функции/переменных в другой ЯП.
Я конечно ещё помучаюсь над этим, но предчувствую что это не даст положительных результатов.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
Я вот что ещё подумал, может проще сделать врапер для Au3Stripper...

Чтобы при /mo (MergeOnly) соединял моим методом (он делает это более корректно), а всё остальное делал Au3Stripper, и уже при использовании задавать для него рабочую папку врапером.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
Оказалось не всё так просто.
Мне пока не удаётся создать даже медленную, но стабильную версию, видимо и вправду старею... :suicide:.
 

asdf8

Скриптер
Сообщения
564
Репутация
152
OffTopic:

CreatoR [?]
видимо и вправду старею..
Здесь же не форум землекопов и такелажников, со временем только опыт и практика растет. Если конечно речь не идет о 90+


Если бы это легко было сделать, то давно уже подобных утилит было бы больше, чем одна.

ps: сам как-то хотел сделать что-то подобное, но работы там действительно немало, поэтому расслабился.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
Последняя попытка.
Работает(?) очень долго (с приложенными скриптами ~15-35 сек.).

:Beta:
:Typing:
 

Вложения

  • A3S_beta2.zip
    10.7 КБ · Просмотры: 11

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
AutoIT 3.3.12.0

если запустить из редактора - работает на предложенных примерах.
компилирую - не обрабатывает включаемые библиотеки. то есть на выходе тот же скрипт, только без строк #include
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
joiner [?]
Я писал для 3.3.10.2.
Но суть не в этом, самое главное чтобы оно было стабильно и без лишних вырезании :laugh:.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
Удалось оптимизировать скорость (с приложенными скриптами ~7-10 сек.).
Перенёс часть кода поиска предустановленных функции на этап получения списка игнорируемых функции.
Также теперь работает и в скомпилированной версии (путь к папке аутоита берётся в первую очередь с ini).
 

Вложения

  • A3S_beta2_2.zip
    10.7 КБ · Просмотры: 5

asdf8

Скриптер
Сообщения
564
Репутация
152
CreatoR
Проблема в том, что, судя по коду, так и не доделан алгоритм определения используемых/неиспользуемых функций/переменных. Это, в дальнейшем приведет к тому, что весь код нужно будет переписывать практически с нуля, или, легче будет забросить проект.




Добавлено:
Сообщение автоматически объединено:

Насчет алгоритма фильтрации - интересное "использование" AutoIt нашел в ISN AutoIt Studio :
Код:
Func _WM_NOTIFY_EDITOR($hWnd, $iMsg, $iwParam, $ilParam)
...
; здесь используется глобально объявленная константа $tagNMHDR
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
...
; здесь локально объявляется $tagNMHDR, которая даже не используется в функции
Local $tagNMHDR, $event
...
EndFunc



Добавлено:
Сообщение автоматически объединено:

CreatoR [?]
самое главное чтобы оно было стабильно и без лишних вырезании
По-моему это очень "не конструктивное" решение, в пределе оно сводится к алгоритму:
- удалить все функции, которые не встречаются вне функций, за исключением функций, которые встречаются в сохраненных функциях (тут, блин, намечается рекурсия)
- удалить все глобальные константы, которые объявлены, но в оставшемся коде больше не встречаются

Результат будет совсем мало отличаться по размеру от исходного файла, вряд ли это будет приемлемо. Больших результатов можно будет добиться, используя какой-никакой синтаксический разбор кода.


Добавлено:
Сообщение автоматически объединено:

Набросал некоторые правила синтаксического разбора кода вне функций:
- если строка начинается с функции или ключевых слов If, For, ElseIf, Case, Switch, Until, With, While, Exit , то все переменные и функции из этой строки необходимы для работы скрипта
- если строка начинается с переменной являющейся COM-объектом , то все переменные и функции из этой строки необходимы для работы скрипта
- если строка начинается с переменной (не константы) за которой идет операция присваивания (знак "=") , то все переменные и функции из этой строки необходимы для работы скрипта (гораздо правильнее было бы проверить используется ли дальше по коду эта переменная в необходимых строках, но тут есть ньюанс - есть такой код который по другому как говнокод не назовешь, в котором эта проверка вернет неверный результат)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
asdf8 [?]
в дальнейшем приведет к тому, что весь код нужно будет переписывать практически с нуля
Планируется переписать сие на другой ЯП, поэтому я особо о скорости не беспокоюсь.

Алгоритм который я использовал описан в шапке скрипта и этой темы.
 

asdf8

Скриптер
Сообщения
564
Репутация
152
CreatoR [?]
- Претендуют на удаление только те переменные, которые имеют Global или Local в начале, а также те, которым не присваивается значение возвращаемое от обработки функции.

Как я уже говорил:

asdf8 [?]
Результат будет совсем мало отличаться по размеру от исходного файла, вряд ли это будет приемлемо.


CreatoR [?]
Планируется переписать сие на другой ЯП, поэтому я особо о скорости не беспокоюсь.

Хоть на ASSEMBLER, как и в оригинальном Au3Stripper есть досадный изъян - время обработки зависит от объема обрабатываемых данных в геометрической прогрессии. Это, кстати, дает основание полагать, что на AutoIt можно будет добиться как минимум не меньшего быстродействия, а, возможно, и большего.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
asdf8 [?]
Результат будет совсем мало отличаться по размеру от исходного файла, вряд ли это будет приемлемо.
Также работает Au3Stripper, т.ч вполне приемлемо.

в оригинальном Au3Stripper есть досадный изъян - время обработки зависит от объема обрабатываемых данных в геометрической прогрессии. Это, кстати, дает основание полагать, что на AutoIt можно будет добиться как минимум не меньшего быстродействия, а, возможно, и большего
Но при этом, большинство пользователей скорость его работы удовлетворяет, поэтому я буду приравниваться к этому (как минимум).
Да и по другому никак, это парсинг текста.
 

asdf8

Скриптер
Сообщения
564
Репутация
152
OffTopic:

CreatoR [?]
Но при этом, большинство пользователей скорость его работы удовлетворяет, поэтому я буду приравниваться к этому (как минимум).

Хорошо, тогда не буду отвлекать.
 
Верх