JUMPOUT в выводе Hex-Rays, как это исправить? - PullRequest
0 голосов
/ 25 июня 2019

Я имею дело с приложением для iOS, у которого есть пара функций, которые производят неожиданный, нечетный вывод в шестнадцатеричных лучах во время процесса декомпиляции.

Хотя функции разные, общая идея заключается в том, чтото же самое происходит во всех них, что приводит к искажению результатов декомпилятора, поэтому я остановлюсь только на одной из функций.

В конечном итоге происходит то, что приложение iOS по существу

загружаетСмещение адреса в регистр X9 выполняет вычисление, которое приводит к ответвлению 0 или 1 в X9 на основе этого смещения. Таким образом, вывод в шестнадцатеричных лучах выглядит как

JUMPOUT (CS, * (& offset_abcdef +)v1))

, где v1 равен 0 или 1.

offset_abcdef содержит 2 квадрата, оба из которых являются адресами, которые являются частью этой же функции, поэтому функция, по сути, переходит всам на основе того, что значение v1 (который, кажется, не меняется, но я могу быть неверным).Я не уверен, является ли это запутыванием или нет.

Тем не менее, использование JUMPOUT в Hex-Rays делает анализ немного более болезненным.Я попытался отменить определение всего последующего кода, который IDA помечал как отдельные функции (даже если они не являются частью одной функции), и изменял границы функций, но JUMPOUT сохраняется, поэтому декомпиляция неверна.

Какие варианты доступны для меня, чтобы заставить Hex-Rays правильно декомпилировать функцию?

...