reverse boost что это
Реализация адаптера Boost диапазона reversed_if
Я регулярно сталкиваюсь с ситуациями в моем коде, в которых я хотел бы выполнять итерации по диапазону в прямом или обратном порядке в зависимости от условий выполнения. Это обычно приводит к коду, подобному следующему
который содержит дублирование кода (первый) или неэффективен (второй).
Я много раз задумывался о гипотетическом адаптере диапазона Boost, который мог бы условно изменить диапазон, чтобы я мог написать
Я могу реализовать это сам (начиная с Вот ) но я не уверен, как поступить. Боюсь, что для поддержки условий выполнения мне придется проверять логическое значение на каждой итерации, чтобы определить направление итерации, или использовать виртуальность для отправки кода итерации. Это причина, почему это не предусмотрено в адаптерах серии Boost?
Любое альтернативное решение?
Решение
Если вы хотите избежать проверки во время выполнения каждого приращения, в какую сторону идти, вы должны преобразовать значение времени выполнения в значение времени компиляции вне структуры цикла.
В этом случае мы хотим, чтобы диапазон, в котором мы зацикливались, изменялся, а тело — нет.
легко способ сделать это состоит в том, чтобы написать лямбду для тела, затем иметь переключатель, чтобы выбрать, какой цикл выбрать.
мы выполнили диспетчеризацию вне цикла, создав два разных цикла со статической информацией о типе цикла.
Мы можем сделать адаптер следующим образом:
где magic_switch берет индекс ( std::size_t ) в качестве первого аргумента. Возвращает лямбду, которая принимает список аргументов. Он возвращает лямбду, которая принимает лямбду и передает ей аргумент из 2-го списка, как определено индексом первого аргумента, в этот список.
это эскиз при реализации (он почти наверняка содержит ошибки сборки).
Сложность в том, что «поток типов» (для обозначения термина) не идет так, как вы обычно этого хотите. Поэтому я вынужден в основном использовать стиль продолжения.
Обратите внимание, что многие компиляторы недовольны расширением пакета, содержащим целую лямбду. Вспомогательная функция, которая возвращает указатель на функцию, может быть написана:
How COD Warzone players are reverse boosting to avoid SBMM and get into easier lobbies
Reverse boosting is a method many players have been using in COD Warzone to make the game easier for themselves. This method involves joining lobbies and then missing shots to get killed early in the game.
This leads the game to believe that the players are weak and groups these strong players with those of a lower skill level. This is one of the loopholes of the skill-based matchmaking feature that COD Warzone has.
The problems with reverse boosting in COD Warzone
Performing well in COD Warzone will pit players against players who have the same level of skill. This tends to remove the fun aspects of the game. Players then tend to reverse boost to get placed in easier lobbies. Now, the problem lies in the fact that many professionals are also doing it to participate in tournaments.
This came to light back in October last year when 100Thieves member Tommey tweeted about how players were abusing the SBMM system in COD Warzone to get into tournaments with a K/D ratio cap.
To follow up on this whole tanking K/D, as far as I’m aware there’s no rule in Vikk’s tournament. That’s the difference from @NICKMERCS to this. They’d have dedicated guys looking through days of stats to make sure nothing like this got swept under the carpet.
The problem with this is that players who abuse the SBMM system in COD Warzone to place in tournaments make it difficult for other players who actually deserve to be in those tournaments. In a way, this also qualifies as cheating.
Tricking the SBMM system by reverse boosting has become very popular off late. Activision is yet to patch this. Although many streamers use this method to generate content for themselves, using a disclaimer in their streams could be a wise choice.
Как работает автоматическое повышение частот у процессоров Intel и AMD
Содержание
Содержание
За производительность компьютера отвечают не только ядра и потоки. В современных чипах производители управляют частотой и вычислительной мощностью при помощи технологий Intel Turbo Boost и AMD Precision Boost. Но у каждой из них есть свои нюансы и особенности. Чтобы разобраться, как они работают, нужно понять, что такое частота, почему она тактовая, и как это влияет на мощность процессора.
Почему частота «тактовая»?
Если говорить просто, частота — это повторяющиеся действия. Частота указывает только быстроту объекта, но не его производительность. Например, двигатель внутреннего сгорания вращает маховик со скоростью 2000 оборотов в минуту. При этом он может выдавать разную полезную мощность.
С помощью тактов обозначают производительность — количество выполненной полезной работы за одно движение. Чтобы разобраться в значении тактов и частоты, можно обратиться к математике. Например, перед нами находятся два колеса, у одного из них радиус 10 дюймов, у другого — 20 дюймов, поэтому, несмотря на одинаковую частоту вращения, колеса будут иметь разную скорость. В этом случае обороты можно принять за такты, а километраж, который колесо проезжает за один оборот — тактовой частотой или производительностью. Отсюда следует, что просто частота — это не качественное, а количественное обозначение. А частота с указанием такта — это уже показатель производительности. Именно тактовая частота указывает на производительность процессоров.
Регулируемая частота
Процессоры — это микросхемы, которые включают миллиарды транзисторов. Высокая плотность компоновки позволяет уместить в одном квадратном сантиметре электрическую схему размером с футбольное поле. Такая конструктивная особенность ставит жесткие условия для работы электроники.
Так, для эффективной работы процессору приходится динамически управлять тактовой частотой. Это полезно для производительности или, наоборот, для снижения нагрева и потребления, поскольку система балансирует на идеальном соотношении мощности и эффективности.
Фирменные технологии, включая Intel Turbo Boost и AMD Precision Boost, лишь частично отвечают за работу алгоритмов управления частотой, их основная цель — повышение частоты сверх базового значения (разгон). Однако динамическая частота берет начало далеко за пределами процессорных технологий — отправной точкой в формировании частоты процессора является тактовый генератор.
Тактовый генератор
Это микросхема, которая синхронизирует работу компьютерных комплектующих. Другими словами, это точные часы, которые независимо и равномерно отбивают такт за тактом. Основываясь на времени между тактами, остальная электроника понимает, когда и как нужно работать.
В современных системах частота тактового генератора зафиксирована на отметке 100 МГц, хотя и может варьироваться в пределах нескольких процентов, чтобы избежать интерференции собственного излучения с высокочастотным излучением других компонентов.
Множитель
Процессор управляет частотой ядер с помощью множителя. Чтобы получить необходимую частоту ядер, система умножает постоянное значение частоты генератора на необходимое значение множителя. В таком случае динамическая частота касается только процессора, тогда как остальные компоненты подчиняются собственным правилам формирования частоты.
До появления новых процессоров, множитель оставался постоянной величиной, потому что его блокировали на заводе аппаратно. Пользователи довольствовались ручной регулировкой частоты через шину: чем выше частота тактового генератора, тем выше частота ядер. В прошлом комплектующие не требовали предельно стабильной частоты BCLK, а в современных платформах ей уделяют особое внимание.
Например, разгоняя систему через шину, мы не только поднимаем частоту процессора, но и увеличиваем частоту оперативной памяти, графического ядра и даже накопителей. К перепадам частоты чувствителен контроллер твердотельного накопителя: он может сыпать ошибками даже при колебаниях шины на 2-3 МГц от заводского значения. Чтобы избежать этого, производители сделали множитель динамическим.
Как работает автоматическая регулировка частоты
Высокая тактовая частота просто необходима для вычислительной мощности ядер. Однако, лишние мегагерцы не только повышают производительность чипа, но также влияют на энергопотребление, нагрев, стабильность и даже безопасность системы. С появлением мощных процессоров появилась необходимость управлять частотой так, чтобы компьютер работал сбалансированно. Есть нагрузка — есть частота, нет нагрузки — процессор отдыхает и не греет воздух в корпусе.
Сначала динамическая частота использовалась для экономии энергии, позже процессоры научились автоматически разгоняться. Производители процессоров догадались, насколько выгодно выпускать чипы, разогнанные с завода. Поэтому тонкое управление частотой и другими параметрами теперь берут на себя фирменные технологии, такие как Intel Turbo Boost и AMD Precision Boost.
Intel Turbo Boost
История фирменной технологии начинается с процессоров i7 серии 9xx. Это семейство Bloomfield, в модельном ряду которого появились чипы с поддержкой технологии Hyper Threading и, конечно, Intel Turbo Boost.
Первая версия позволяла разгонять процессор всего на 200-300 МГц выше базовой частоты. Это было физическим ограничением: кремний того времени тяжело переваривал разгон, и без существенного повышения температуры и напряжения было сложно взять рекордные цифры в полной нагрузке на все ядра.
Но вместе с развитием полупроводников и техпроцессов процессоры приобрели врожденную способность к хорошему разгону. Теперь поднять частоту на 1 ГГц от базовой не составляет труда даже автоматике, особенно после того, как в Intel доработали фирменную технологию и представили несколько дополнительных алгоритмов. Вторая версия Intel Turbo Boost появилась в процессорах еще в 2010 году и по сей день работает даже в самых совершенных и актуальных чипах семейства Rocket Lake.
Как это работает
С помощью технологии Turbo Boost 2.0 процессор управляет тактовой частотой так, чтобы ядра оставались производительными во всех нагрузках без перегрева и выхода за рамки заводского теплопакета. Правда, есть несколько нюансов. Рассмотрим работу Turbo Boost на процессорах Coffee Lake.
Например, TDP процессора составляет 95 ватт, но при этом система буста позволяет процессору в течение некоторого времени работать с большим энергопотреблением. Эти параметры настраиваются автоматически, а материнские платы на базе Z-чипсетов даже позволяют регулировать их вручную:
Настройки, выделенные красным блоком на скриншоте, относятся к технологии Turbo Boost. Это основные параметры, которые влияют на работу автоматического разгона и задают максимумы для разгона процессора. Параметр «Long Duration Package Power Limit» инженеры Intel называют PL1 — это заводской уровень энергопотребления (TDP), который является опорным для работы Turbo Boost. Для Core i7 9700K значение PL1 составляет 95 ватт.
Для работы буста производитель предусмотрел второе значение — Short Duration Package Power Limit или PL2. Этот параметр влияет на абсолютный предел энергопотребления процессора в нагрузке и бусте на все ядра. Стандартная формула для подсчета этого параметра следующая: PL2 = PL1*1.25
В таком случае «вторая скорость» восьмиядерного 9700K может достигать 120 ватт. По замыслу инженеров, именно столько энергии потребляет процессор в заводском разгоне, чтобы оставаться в безопасных значениях по напряжению и нагреву. Правда, чтобы защитить процессор, режим PL2 может работать только ограниченный промежуток времени, после чего откатывается к потреблению по правилам PL1. Это время обозначается как «Package Power Time Window» или «Tau».
Основываясь на этих лимитах, процессоры Intel регулируют частоту. Например, если теплопакет процессора остается в рамках PL1, то частота будет достигать максимума. Если же процессор нагружен так, что его энергопотребление превышает режим PL1 и достигает PL2, то повышенная частота продержится на высоких значениях только заявленное время Tau, а затем вернется на безопасные значения. Intel неохотно раскрывает подробные параметры, однако энтузиасты смогли раздобыть немного интересной информации о семействе Coffee Lake:
Частота процессора в режиме Turbo Boost подчиняется опорной частоте (тактовый генератор) и значению множителя, а также зависит от параметров энергопотребления процессора. Стоит сказать, что настоящие значения PL2 и Tau не всегда соответствуют тем, которые можно рассчитать или найти в открытых источниках. Например, тот же Core i7 9700K может с лихвой перевалить за 140 ватт и работать, если позволяют система охлаждения и подсистема питания.
А можно еще быстрее?
Новые процессоры Intel поддерживают не только Turbo Boost 2.0, но и несколько «надстроек». Это Turbo Boost Max 3.0, Intel Velocity Boost и Intel Adaptive Boost, которые не заменяют основной алгоритм повышения частоты, а расширяют его функционал.
Intel Turbo Boost Max 3.0 — дополнение к основному бусту. Технология сочетает аппаратные алгоритмы Turbo Boost 2.0 и программные, которые определяют самые быстрые ядра процессора и делегируют им однопоточные задачи. В результате частота удачных ядер может подниматься на 15% выше пределов по Turbo Boost. Кроме хорошего охлаждения и питания, для работы технологии необходим соответствующий процессор, а также Windows 10 последней версии.
Intel Velocity Boost — надстройка над заводским разгоном, а также над Turbo Boost 3.0. Алгоритм следит за температурой и позволяет работать всем ядрам процессора с более высокой частотой, если температура не превышает условного значения. Например, для процессоров Comet Lake это значение соответствует 70 °C. Таким образом, десятиядерный процессор может достигать 4.9 ГГц по всем ядрам, тогда как стандартный буст разгонит процессор всего до 4.8 ГГц.
Intel Adaptive Boost — новая технология, она еще не изучена вдоль и поперек, как остальные, но некоторые подробности уже известны. Первыми поддержку получили процессоры Core i9 11900K и Core i9 11900KF семейства Rocket Lake. Принцип работы нового алгоритма заключается в отслеживании температуры ядер и лимитов энергопотребления. Если все данные сходятся в допустимых пределах, то технология разгоняет ядра еще сильнее, чем обычный Turbo Boost и Velocity Boost, позволяя всем потокам одновременно достигать 5.1 ГГц, вместо 4.7 ГГц в стандартном бусте.
Поддержка технологий регулировки частоты зависит от модели процессора, а также его поколения. Например, Velocity Boost, как и новейший Adaptive Boost, поддерживается только топовыми Core i9, тогда как Turbo Boost 2.0 можно встретить даже в моделях Intel Core i3.
AMD Precision Boost
У красного лагеря свое понимание заводского разгона, которое несколько отличается от конкурентов. Например, AMD не привязывает частоту к целым значениям от шины и может регулировать ее вплоть до 25 МГц, тогда как буст Intel всегда кратен 100 МГц. Отсюда и название Precision Boost — «точный разгон». В то же время, принцип регулировки завязан на лимиты потребления, температуры и частоты почти так же, как и Core.
Двое из ларца
В жизни процессоров AMD было несколько технологий настройки частоты. Прошлые поколения использовали алгоритмы Turbo Core, а с появлением ядер Zen и процессоров Ryzen инженеры придумали технологию Precision Boost, которая позже превратилась в версию 2.0. Принцип работы обеих версий турбобуста идентичен. Разгон ядер подчиняется трем ограничениям: температура, мощность и частота. Если представить их в виде равнобедренного треугольника, как это делают инженеры AMD, то получится так:
Синий треугольник обозначает максимумы для каждого из трех пределов процессора. Сиреневый треугольник показывает, каким образом параметры влияют друг на друга при достижении одного из лимитов. Если проще, то, как только процессор упрется в энергопотребление, частота перестанет повышаться и зафиксируется в пределах 25 МГц от лимита частоты (отмечено черным цветом).
Если же процессор быстрее достигнет максимальной температуры, а не лимита потребления, то частота также остановится на определенном, но не максимальном значении. В то же время, если процессор эффективно охлаждается и не ограничен по питанию, то лимит частоты будет пройден, а максимальная тактовая частота процессора достигнет заводского предела — вершины синего треугольника.
Так работает Precision Boost обеих версий. Единственный минус первой версии PB — жесткое снижение частоты при загрузке более двух ядер. Обратимся к наглядному графику:
Сиреневым цветом обозначена работа Precision Boost первой версии, которая работает следующим образом: когда система нагружает одно или два ядра, алгоритм разгона поднимает частоту на максимум, заложенный в процессор с завода.
В случае, если система нагрузит больше двух потоков, буст резко снизит частоту. Получается, что в таком режиме процессор остается производительным только в однопоточных заданиях, а при одновременной нагрузке хотя бы трех ядер резко теряет вычислительную мощность.
Вторая версия алгоритма Precision Boost 2 меняет подход к управлению частотой в зависимости от нагрузки. Во-первых, новая технология позволяет процессорам работать с более высокими частотами. Во-вторых, при нагрузке на все ядра система не сбрасывает частоту резко, а делает это плавно, от ядра к ядру. На графике это обозначено оранжевой линией.
Впрочем, автоматическая регулировка частоты не ограничена физическими лимитами процессора. AMD заявляет, что алгоритмы Precision Boost 2 стали хитрее, поэтому максимальная частота ядер достигается не только в пределах температуры, напряжения и энергопотребления, но также зависит от задач. Например, в приложениях с невысокой нагрузкой на процессор, ядра будут работать на повышенных частотах, даже если это нагрузка сразу на все потоки. В то же время процессор будет немного снижать частоту в рендеринге и других трудоемких заданиях.
Заводской Boost лучше ручного разгона
Производителям удалось сделать то, к чему пользователи стремились в течение многих лет: современные процессоры работают намного эффективнее предшественников благодаря автоматической частоте. Если раньше энтузиасты настраивали частоту ядер через аппаратные модификации материнских плат и процессоров, то сегодня для настройки достаточно нажать кнопку «Включить» на системном блоке. Остальное за нас сделает автоматика.
Порой она работает эффективнее, чем ручная настройка. Когда мануальный разгон заставляет все ядра работать с одинаковой частотой, турбобуст позволяет разгонять отдельные ядра выше, чем это возможно в ручном режиме. Поэтому однопоточная производительность актуальных чипов показывает неплохие цифры, которых не всегда можно добиться настройками в BIOS.
Более того, заводские алгоритмы повышения частоты следят за состоянием процессора и подсистемы питания, они не позволят электронике работать на пределе стабильности и безопасности. Неопытный пользователь вряд ли обеспечит системе такой уровень качества, настраивая частоту и напряжение на ядрах самостоятельно.
Огромный плюс заводского буста — высокая тактовая частота даже на процессорах с заблокированным разгоном. Поэтому даже бюджетный шестиядерный процессор все еще эффективен в играх и там, где важен показатель IPC — однопоточной производительности.
Reverse engineering: обратная разработка приложений для самых маленьких
Выделяют 4 методики проведения обратной разработки:
анализ обмена данными приложения, с помощью различных анализаторов трафика;
использование режима отладки для поиска нужных участков кода и просмотра данных с которыми работает приложение;
дизассемблирование машинного кода программы (изучение требует довольно много времени);
декомпиляция кода программы для создания исходного кода программы на языке программирования высокого уровня.
Установка
Рекомендуемым разработчиками способом установки и обновления Radare2 является установка из официального git-репозитория. Предварительно в системе должны присутствовать установленные пакеты git, build-essential и make.
Запуск установки рекомендуется производить не из под пользователя root, иначе скрипт сам произведёт понижение привилегий.
Далее устанавливаем графическую оболочку для Radare2. Мы будет устанавливать официальный GUI под названием Iaito. Установим пакеты, необходимые для установки Iaito:
Для дистрибутивов Linux на базе Debian, есть готовые пакеты, ссылки на которые можно взять тут. Скачаем и установим нужную версию пакета:
Теперь установим плагин r2ghidra, который является интеграцией декомпилятора Ghidra для Radare2. Плагин не требует отдельной установки Ghidra, так как содержит в себе всё необходимое. Для установки плагин доступен в качестве r2pm пакета:
Установленный плагин автоматически интегрируется в GUI Iaito. После установки запускаем графическую оболочку и если все сделали правильно, то видим стартовый экран:
Теперь мы можем заняться нашим примером. Суть программы-примера заключается в следующем: при запуске на экране выводится некий токен, необходимый для того, чтобы зафиксировать выполнение задания и приватный SSH ключ. Но что-то пошло не так и в результате ключ выводится в некорректном виде, а токен не принимается в качестве правильного.
Первый запуск программы-примера
Открываем файл в Iaito, оставляем настройки анализа по умолчанию:
После того, как Radare2 проанализирует файл, смотрим результат, открывшийся во вкладке Dashboard:
Программа скомпилирована под 64-битную версию Linux, написана на языке C. Слева мы видим список функций, которые Radare2 смог обнаружить. Среди них импортируемые из библиотеки libc функции printf, puts и putchar, выводящие на экран строку по формату и символ.
Функция main – это главная функция программы. Выполнение начинается с неё. Кликнув два раза по её названию, открывается вкладка Disassembly с результатом её дизассемблирования:
Немного про Ассемблер
Команды ассемблера
Каждая команда Ассемблера — это команда для процессора. Синтаксис команды состоит из нескольких частей:
Или рассмотрим другой пример как выглядит возведение числа в степень в Ассемблере:
Это же действие будет выглядеть на языке высокого уровня, например, Си как:
Вернемся к нашему заданию
Для большего понимания логики выполнения программы можно переключиться на вкладку Graph внизу окна. Там мы увидим блоки команд функции, в которой мы находимся, и переходы между ними, построенные Radare2 на основе команд условных и безусловных переходов.
Масштабирование на этой вкладке выполняется сочетаниями клавиш Ctrl+»-» и Ctrl+»+». Можно было бы начать разбираться в работе программы уже с этого места, но есть возможность посмотреть на программу в ещё более “читаемом” виде. Переключаемся на вкладку Decompiler, внизу окна и видим псевдокод, полученный в результате декомпиляции (восстановление до кода на языке, на котором программа была написана, в нашем случае – язык C) средствами встроенного декомпилятора Radare2.
В полученном тексте всё ещё много упоминаний регистров и безусловных переходов. Переключимся на декомпилятор Ghidra, который мы ранее установили. Для этого в правом нижнем углу окна в выпадающем списке выберем “pdg” вместо “pdc”.
Теперь код программы стал практически полностью читаем, за исключением имён переменных.
В коде мы видим, что сначала выводится строка “Token:”, после чего происходит вызов некой функции с двумя параметрами, после которого идёт цикл с переменной var_8h, которая проходит значения от 0 до 14 включительно и выводит что-то посимвольно, основываясь на адресе памяти 0x5020 и счётчике с множителем 8. Из этого можно сделать вывод, что в памяти, начиная с адреса 0x5020, расположен массив структур из 15 значений размером 8 байт. Также стоит обратить внимание, что адрес 0x5020 передавался в качестве первого параметра в функцию, вызываемую перед этим циклом. Будем для простоты далее называть его “токен”. Далее по коду выводятся строки начала закрытого ключа и в цикле выводится посимвольно закрытый ключ. Внутри цикла вывода ключа идёт повторяющийся цикл по обнаруженному нами ранее массиву структур, используя переменную var_ch. Перед выводом на экран над каждым символом закрытого ключа производится операция исключающего ИЛИ (XOR) с текущим символом токена. После цикла выводится строка, завершающая закрытый SSH ключ. Исходя из того, что выводимый программой токен не является правильным, можно сделать вывод, что что-то происходит не так в ранее обнаруженной нами функции с двумя параметрами fcn.00001189, вызываемой перед выводом токена на экран. Перейдём на неё, дважды кликнув по названию функции в списке слева.
В полученном после декомпиляции коде функции мы видим, что она представляет из себя двойной цикл с параметром, в котором после сравнения двух значений элементов структуры происходит их обмен местами, если одно значение меньше другого. Больше всего это похоже на алгоритм сортировки. В частности, на одну из реализаций сортировки “пузырьком”. Основываясь на информации об алгоритме сортировки “пузырёк” и полученном нами коде, можно сделать вывод, что условие выхода из вложенного цикла написано с ошибкой. Проход осуществляется не до конца массива структур.
Получается, нужно это исправить. Переключимся на вкладку дизассемблера:
В полученном коде мы видим только одну команду вычитания 8:
Переключимся в режим графа, чтобы соотнести ассемблерный код с результатом декомпиляции:
Представление в виде графов
Проанализировав логику переходов и соотнеся её с ассемблерным кодом подтверждаем, что нас интересует именно эта область функции.
Для этого, находясь на вкладке дизассемблера, поставим курсор на эту команду и переключимся на вкладку Hexdump:
По относительному адресу команды 0x00001211 убеждаемся, что курсор стоит там, где необходимо. Выделяем 4 байта, начиная с адреса 0x00001211 и справа выберем вкладку “Parsing”. Увидим результат дизассемблирования выделенных байт.
Теперь нужно заменить выделенные байты на 4 байта со значением 90 (шестнадцатиричное значение машинного кода команды nop), но тут мы сталкиваемся с тем, что в Iaito нельзя просто так отредактировать шестнадцатиричное значение по адресу. Список доступных действий мы можем увидеть, нажав на выделенных байтах правую кнопку мыши.
Да, можно воспользоваться сторонним hex-редактором, но это было бы “неспортивно”. Так как мы пробуем выполнить все действия только в рамках функционала Radare2, то будем использовать что есть.
Сначала выберем “Write zeros”. Iaito напомнит нам, что файл открыт в режиме “только для чтения” и предложит переоткрыть его либо в режиме для записи, либо включить режим кэширования. В режиме кэширования все изменения к исходному файлу будут применяться только после выбора пункта меню “File → Commit changes”.
Выберем режим кэширования, после чего снова попытаемся записать нули. И теперь это у нас получается. На каждом из четырёх байт выберем из контекстного меню пункт “Edit → Increment/Decrement” и добавим значение 144 (десятичную запись шестнадцатиричного числа 90).
Смотрим на получившийся результат:
После внесения изменений не забываем нажать “File → Commit Changes”. Запускаем ещё раз программу dechip, чтобы посмотреть результат наших действий:
Стоит отметить, что часть наших действий основывалась на предположениях. И не всегда они подтверждаются так быстро и успешно. Для гарантированного успеха нужно более глубоко изучать язык Ассемблера той архитектуры процессоров, реверсом программ для которой Вы хотите заниматься, а также наиболее распространённые алгоритмы.
Заключение
В целом, бесплатный аналог IDA Pro в лице Radare2 является довольно неплохим решением. Однако, официальный GUI Radare2 хоть и позволяет удобно перемещаться между инструментами Radare2 и в части отображения информации удобнее консольной версии, но в то же время он ещё недостаточно доработан и не предоставляет всех возможностей, которые можно реализовать через консоль. Со всеми возможностями консольной версии можно ознакомиться в официальной книге по Radare2.
Что касается обратной разработки, то он оказался совсем не страшным и даже при начальном уровне знания языка Ассемблер можно разбираться в устройстве какого-нибудь простенького приложения. А в Корпоративных лабораторияx Pentestit можно попробовать свои силы не только в реверс-инжинеринге бинарных файлов, но и в деассемблировании Android/IOS приложений.