arm-ndk逆向记录

1,编译参数能够设置类名和其成员函数名能被逆向出来,简单的是设为debug模式.release下也可以,具体设置回头总结。

2,代码里即便是类的静态成员函数,其参数甚至函数本身,都可能会被编译器优化掉,填充一些会计算到所有参数的较复杂代码,能解决设个问题。填充下游函数还需要一些技巧。

3,汇编对类型很敏感,int到float的强转什么的,要注意编译器的理解。

4,构造函数不和new出现在一起,而是出现在其他成员函数里面,提示是结构体的构造函数。

5,结构体参数,结构体成员可以占用r1,r2寄存器。

6,short*动态创建short数组,数组的size为int类型,编译器会生成这样的代码v9 = 2 * a3;
      if ( __CFADD__(a3, a3) )
        v9 = -1;。因为c代码里的数组字面尺寸还没有乘以元素尺寸。

7,返回值为结构体的类成员函数,r0会保留为返回值,r1为this,r2以后为参数,导出符号只有r2以后的类型作为后缀。

8,调用下游函数,要注意下游函数的编译是否正确,成员函数如果没有使用this指针的地方,编译器会忽略掉把this指针传递进去。

9,orr是按位或,网上有说没有被操作数处理到的位置0,是不对的。所有位按位或。

10,ida调试IT指令有坑?:

libHero.so:765004FC PUSH            {R7,LR}
libHero.so:765004FE ORR.W           LR, R3, R2
libHero.so:76500502 MOVW            R12, #0xFFFF
libHero.so:76500506 CMP.W           LR, #0
libHero.so:7650050A ITTT GE
libHero.so:7650050C ADDGE.W         R0, R0, R1,LSL#2
libHero.so:76500510 LDRGE           R1, [R0,#0x44]
libHero.so:76500512 CMPGE           R1, R3
libHero.so:76500514 BGT             loc_7650051C
libHero.so:76500516
libHero.so:76500516 loc_76500516                            ; CODE XREF: libHero.so:76500530↓j
libHero.so:76500516 UXTH.W          R0, R12
libHero.so:7650051A POP             {R7,PC}

地址位数506处的cmp.w lr,#0  当lr>=0时后面单步步入到50c以后,如果510 512不下断点,那么从50c再次单步执行就直接到516了。甚至把51c接的好几条指令都略过了!

11,如果循环判断一个bool值,那么会有while(x<<24)这样的编译结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值