Я имею дело с приложением для 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 правильно декомпилировать функцию?