цикл который выполняет огромное количество итераций, но мы хотим, чтобы какие-то действия исполнилось только один раз. В Яву мы для этого использовали бы битовый флаг, но с точки зрения ассемблера возможно сделать джамп в начале цикла, а потом в конце этого участка перезаписать этот джамп nop-ом. Имеет ли смысл делать подобное или вообще любое программное вмешательство в исполняемый код программы вредно?
в яву бы это однократное действие выполнялось бы до цикла или после него
Предположим, что это сделать невозможно принципиально
Имеет. Я так в некоторых проектах делал.
Принципиально невозможно помещать сделать так.
Цикл обработки сообщений от оконного приложения WinAPI так работает
Незачем. Предсказатель ветвлений обучится так или иначе.
Ну нопы ведь все равно в тактах дешевле, чем условные прыжки
будет сбиваться кэш кода, а это уже многое теряет в скорости
Один раз только в начале
У тебя следующая итерация начнет ещё до джампа выполняться. Если это на самом деле цикл, который что-то считает. А если это оконный цикл, походы в ядро и весь остальной апи сожрут и предсказателя, и весь эффект от твоих патчей. И кэш тоже.
Это имеет смысл всегда, делай так, если хочешь.
Ну я просто хочу понять, будет ли это в принципе полезно, вредно или ни на что не повлияет
SMC позволяет невероятно уменьшить вес, это выглядит круто и просто доставляет удовольствие. По скорости невозможно определить, можешь провести тесты, но скорость вряд ли упадёт. Так что делай.
SMC? Self-modifying code?
А ещё в вм, которые x86 на арм запускают, например, может быть очень серьезный дроп: оно пометит страницу, как содержащую самомодифицируемый код, и привет.
А че будет от такого? Антивирус может взвыть?
У тебя и так 12 обнаружений, из которых довольно уважаемые антивирусы пометили программу как "100% malicious", тебе серьёзно интересно мнение антивирусов?
Ладно, тогда главное чтобы защитник винды не ругался🤣
Нет, я про вм типа qemu. Динамическая бинарная трансляция. Оно переведет код в целевую архитектуру и покэширует. А если решит, что ты любишь smc, то не покэширует, и будет постоянно переписывать. Не так плохо, как я описываю, но иногда будет.
По своему опыту скажу, что он ругается: 1. Если программа консольная, но не использует вывод\чтение консоли 2. Если программа GUIшная, но не рисует GUI 2.1. Если программа GUI, но не имеет ресурсов Там у Defender встроена нейросеть, и она ооочень сложная, даже отсутствие иконки или метаинформации может повлиять, но только в сумме с другими факторами.
Обсуждают сегодня