ARM-8 代码还原动态调试之 pstree b.ls跳转

B

Branch causes an unconditional branch to a label at a PC-relative offset, with a hint that this is not a subroutine call or return.

在PC相对偏移处对标签进行无条件分支,并提示这不是子程序调用或返回。


       操作码    助记符    标志         含义    
0x9     1001    LS        C=0,Z=1     无符号数小于或等于

 

  404e5c:    97fff37d     bl    401c50 <strdup@plt>     // strdup()
  404e60:    aa0003f6     mov    x22, x0               // x22=x0
      dest = strdup(a);

  404e64:    97fff2ef     bl    401a20 <strlen@plt>     // strlen(x0)
  404e68:    f108001f     cmp    x0, #0x200              // x0 ?= 512
  404e6c:    54000189     b.ls    404e9c <ferror@plt+0x2fbc>  // b.plast  // <=
    if (strlen(a) > 0x200) {
        // b.ls 404e9c
    }

顺序为从左到右,即当 x0 <= 0x200时跳转。gcc 下Arm cmp指令与Intel的顺序不一样,Intel是从右向左的比较。

    404e64:    97fff2ef     bl    401a20 <strlen@plt>                 // strlen(x0)
    404e68:    f108001f     cmp    x0, #0x200                           // x0 ?= 512
    404e6c:    54000189     b.ls    404e9c <ferror@plt+0x2fbc>  // ls(<=),  0x200 <= x0

有两种写法:
    if (strlen(a) <= 0x200) {
        // b.ls 404e9c
    }

或者

    if (0x200 > strlen(a)) {
        // b.ls 404e9c
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值