hopper反汇编工具的逆向伪代码功能并不理想 – bbqz007

hopper的对话信号效能并不如设想中这么好,主要地当运用反向C 信号时。。朝着that的复数曾经进入OSO开拓的Objc和过错与众毫不含糊的的的CL,hopper可以将反缀编码出口成[obj Objc职务转乘,比如发现者:什么?,这将是使大为吃惊的。。其实,Objc职务转乘的线索是中心职务的MSGySead(c)。 style)而且枢纽机制(ObjC客体音讯机制)说话中肯分配机制(音讯分配)的音讯@selector。MSGJEnter是一种C模仿的职务。,只需咨询它的咨询设置。,如安在X64零碎中完成GCC转学限制因素,linux,mac,IOS申请。客体音讯@发现者是独身SEL典型。,它的构成释义是常数。 char* const, 而且在图像的知识段中必须做的事有对应的字母串。。这么一来,但愿如此SEL音讯有独身字母串。,您可以排类似地体式替换出口的本子。。实在,用hopper来对话ObjC的职务可以非常预先消化反缀编码的视野(转乘了关系代词职务这点上),比如,Objc职务转乘。,领地这些提议都反复并采用了诸多提议。,独身庇护看不到数个工具。。

只C 是毫不含糊的的的。。如今我选择独身职务。,因hopper的复杂剖析折扣了。

我选择了独身效能在X64版本的可可饮料的iOS模拟装置。,C::层::StIdBIT。上面是hopper的对话伪信号:

要不是闪烁罢了。,它任务得地租。,但这是错误的的。。

率先是对咨询文献的剖析。,如此错误的,开端是不合错误的。,大错误的面前。。这比正好剖析信号更偏袒。。
其次,无法区别动态围攻职务或围攻f。。
第三,方法转乘围攻职务交给是不毫不含糊的。。

上面是我对hopper加的旁注:

第一位,反向伪码。:

和废除信号。:

<20161002 补充>

hopper将rdi至r8五表达往职务典型的五限制因素上硬套。

事实上的C::层::StIdBIT是独身围攻职务,RDI是客体交给。,RSI是职务典型的第独身限制因素。,宗教团体4个往事编号作为咨询。,最终的独身限制因素是职务交给。,缺少运用R9,相反,咱们运用栈的两个CPU程度的程度作为最终的独身PA。。

如今咱们开端逐个地剖析它们。。
率先hopper挑战了this交给如此限制因素。为什么Objc的效能处理了如此成绩?,坚决地说,亲手过错如此交给。,它是在C模仿职务中由LLVM编辑程序构成释义的第独身限制因素。,次要的个限制因素由MsgsEnthyStrut构成释义。,即,Objc的职务转乘本质上是C模仿职务。。C的围攻职务转乘静止摄影独身商定,因而hopper折扣了。
hopper以c风骨职务的传参商定套用在围攻职务C::层::StIdBIT构成释义的限制因素序列,这是独身错误的的开端。。你可以主教权限对齐信号。,表达%RSI被发送到-0x40(%RBP)的往事单元。,如此%RSI是C 围攻职务的第独身限制因素。,而对应于hopper对话信号的arg0。再hopper错误的套用商定,hopper主教权限的限制因素向左shift了独身身位,如下,将%RSI作为围攻职务的次要的个限制因素。,var_40=arg1。
因而hopper右手的对话麝香从这么开端:

int C::层::StIdBIT(uint32_t arg1, uint32_t 精氨酸, uint32_t arg3, bool arg4, void(*arg5)(*)) {
    assert(this == arg0);
    var_40 = arg1;

这么,它的反向出口信号不太可能性给错误的劝告使住满人。。
你主教权限差别了吗?,我再补一下hopper的错误的制造作平行地

int C::层::StIdBIT(uint32_t arg0, uint32_t arg1, uint32_t 精氨酸, bool arg3, void(*arg4)(*)) {
    var_40 = arg1;

这是在实践开拓和调试中。,偏袒的任务时间是十足的。。

经过适应,hopper折扣的成绩执意处理了吗?
缺少,hopper对话寂静折扣了。错误的是削尖围攻职务的交给的剖析。。对话的范本C::层::StIdBIT最终的独身限制因素是独身围攻职务交给,用于回调。。但在hopper的对话信号中,还没有运用此限制因素。,因hopper失败了。
或许在MSVC平台下。,hopper将围攻职务交给考虑是void*可能性会擦边撞击右手,但它无常的是在*NIX和BSD零碎的平台上。。因*NIX和BSD是由GNUUC规范编辑程序编辑的。,即,GNUUC中交给到围攻职务的规章过错独身复杂的生趣。,我还绍介了先前的文字。。咱们评论信号。,如此范本职务并缺少运用R9来发表arg5,再,运用两个堆栈单元来转学咨询。,这么,限制因素的定量就出狱了。。假定你不发生围攻职务交给在GNUUC编辑下,很难解说如此职务。。请咨询我垄断的文字。,反缀编程序以检查围攻职务交给(GCC @ x64平台)。这边的两个堆栈事实上的是最终的独身限制因素(围攻职务POIN。,它过错独身复杂的地址交给。,它是独身度为2使缓慢地移动的灵。。是的,围攻职务交给是独身客体。。凡运用VARY50和VARY58,这事实上的是削尖围攻职务交给的援用。。
只hopper的对话寂静错了(rcx)(rdi),hopper将围攻职务交给作为普通职务交给来解说了。大伙儿都毫不含糊的。,RDI过错构成释义输出限制因素的围攻职务。,修订后,麝香是RDI>(RCX)(VARY38)。。

静止摄影执意hopper并缺少右手剖析出如此范本职务的复发典型,运用int作为。其实,你可以从对齐信号的复发一份遗产主教权限。,RAX上缺少开刀。,即,回到虚空。。

次要的个成绩与上述的成绩使相等。,只答复被转乘到反向信号BOD说话中肯对立面围攻职务。。C::事务::锁定()这过错动态围攻职务。,必须做的事有独身转乘客体。,再是hopper缺少毫不含糊制造在四周转乘客体的削尖。
r12 = CA::买卖:
C::买卖:锁定
麝香为:
rdi = r12 = CA::买卖:
((CA::Transaction*)r12)->lock();

第三个成绩,围攻职务交给的转乘不毫不含糊。,在提到MEM的交给时,这是第独身成绩中提到的。。

最终的,我号我反复的信号。:

发表评论

电子邮件地址不会被公开。 必填项已用*标注