ARM 代码还原动态调试之 两个出口

       源代码编译后,编译器会启用优化,致使执行指令呈乱序。当发现有两个以上出口时,可以写成函数的形式。

  402274:    f9400773     ldr    x19, [x27, #8]      // x19=list
  402278:    b4002bb3     cbz    x19, 4027ec <ferror@plt+0x90c>  // list=null, b
  40227c:    aa1303f4     mov    x20, x19            // x20=walk=list
  402280:    14000003     b    40228c <ferror@plt+0x3ac>   // walk!=null, b
  402284:    f9406294     ldr    x20, [x20, #192]            // x20=walk->next
  402288:    b4002b34     cbz    x20, 4027ec <ferror@plt+0x90c>
  40228c:    b9405680     ldr    w0, [x20, #84]      // w0=walk->pid
  402290:    7100041f     cmp    w0, #0x1            // w0 ?= 1
  402294:    54ffff81     b.ne    402284 <ferror@plt+0x3a4>  // b.any
  402298:    140000d0     b    4025d8 <ferror@plt+0x6f8>*/
    #if 0
    static PROC *find_ac(pid_t pid)
    {
        PROC *walk;

        for (walk = list; walk; walk = walk->next) {
            // b.ne    402284
            if (walk->pid == pid)
                return walk;        // b 4025d8
        }
        return NULL;    // cbz 4027ec
    }
    #endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值