169 похожих чатов

Есть вопрос теоретический у меня (идея оптимизатора бинарников Delphi/FPC) На картинке

асм для кода вида:
if (arr[i+1]=1) or (arr[i+2]=2) or (arr[i+3]=3) or (arr[i+4]=4) then ...
тут видно, что непонятно зачем компилятор постоянно обращается к памяти, считывает в регистр, не изменяет его и снова тоже самое туда считывает... это не оптимально

Можно ли написать анализатор+патчер для такого рода кода, чтобы такие повторные лишние обращения к памяти он просто заNOPливал?

Причём повторюсь - сделать такое на уже готовом бинарнике

11 ответов

22 просмотра

Ну ты чуданул! Можно, но, наверное, пока только на основе паттернов. Чтобы распознавать бесполезные инструкции - это надо такую систему умную писать, строк на 100 000.

notme- Автор вопроса
КТ315
Ну ты чуданул! Можно, но, наверное, пока только на...

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

notme
ну я именно только этот вариант подобный хочу обра...

Так это лучше через регулярки сделать. Написать правило с опкодами, которое ищет определенный опкод, между ними что-то любое (любых до 20 байт, к примеру, или пока не встретим байт-исключение) и после - какие-то ещё опкоды. Если есть такое выражение - NOP.

КТ315
Так это лучше через регулярки сделать. Написать пр...

А ещё уже такой инструмент есть. Но он не совсем для такого, но для теста пойдёт - Yara называется.

notme- Автор вопроса
КТ315
Так это лучше через регулярки сделать. Написать пр...

та не ну не совсем прям этот пример только, а все подобные... где данные берутся из памяти постоянно заносятся регистр, но память может быть разная.... для разных блоков которые обрабатывать

notme
та не ну не совсем прям этот пример только, а все ...

Так всё равно через регулярки решается. Yara для начала можно использовать, он может даже динамически анализировать.

notme- Автор вопроса
КТ315
Так всё равно через регулярки решается. Yara для н...

ну не знаю... мне же джампы учитвать ещё нужно, реты, ярой наверное тут не обделаться )

а у fpc опции -O2 нету?, ааа на бинарнике

notme- Автор вопроса
randomize usr
а у fpc опции -O2 нету?, ааа на бинарнике

Есть, даже -О4 есть Но что FPC, что Delphi имеют очень слабые оптимизаторы, что вот такой вот кот получсется

это с -O4 ?

notme- Автор вопроса
Mixail Frolov
это с -O4 ?

Да, там оптимизаторы что в дельфе, что в фпц такие вот

Похожие вопросы

Обсуждают сегодня

зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
Можно попросить небольшое ревью кода? Тут немнога, я ничего интереснее не придумал, чем написать аналог tree в качестве практики с cmake. https://github.com/hrimov/tree-unix/...
Andrew Hrimov
11
Всем привет. Ребят подскажите пожалуйста. Вопрос по дизасемблировани. Начну с начала. У меня есть скомпилированная программа на ГО (я разработчик) - в ней есть защита лицензии...
Zloy
11
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Но если Евгений и Алекс используют в боевых условиях, то почему нет? А ты как-то про бизнес больше задвигаешь, это имеет к разработке отношение, но все же этим больше другие л...
Keiman
5
все привет. подскажите может кто сталкивался evo 3 если в formlister в параметр formTpl указать имя чанка а не через @CODE то в указанном чанке не парсятся плейсхолдеры [**]? ...
Иван Тарасевич
7
Карта сайта