我正在处理一个iOS应用程序,该应用程序具有几个功能,这些功能在反编译过程中会在Hex-Ray中产生一些意外的奇怪输出。
虽然功能不同,但总体思路是,所有这些功能都发生相同的事情,最终使反编译器的结果发生偏差,因此我只关注其中一个功能。
最终发生的事情是iOS应用程序本质上将
将地址偏移量加载到寄存器X9中 执行计算结果为0或1 根据该偏移量在X9处分支 因此Hex-Rays中的输出看起来像
JUMPOUT(CS,*(&offset_abcdef + v1))
其中v1为0或1。
offset_abcdef包含2个四边形,这两个都是同一函数的一部分的地址,因此该函数实质上是根据v1的值跳入自身(这似乎没有变化,但我可能不正确) 。我不确定这是否令人困惑。
也就是说,在Hex-Rays中使用JUMPOUT使分析更加痛苦。我尝试取消定义IDA标记为单独函数的所有后续代码(即使它们不是同一函数的一部分),并更改函数边界,但是JUMPOUT仍然存在,因此反编译是不正确的。
我在这里可以使用哪些选项来获取Hex-Rays以正确地反编译该函数?