/*
* CMN : 比较取负的值
*/
(Compare Negative)
CMN{条件}{P} <op 1>, <op 2>
status = op_1 - (- op_2)
CMN 同于 CMP,但它允许与小负值(操作数 2 的取负的值)进行比较,
比如难于用其他方法实现的用于结束列表的 -1。这样与 -1 比较将使用:
CMN R0, #1 ; 把 R0 与 -1 进行比较。--> R0=-1, -1+1=0 || -1-(-1)=0
cmn r1, r0 // r1 与 r0 的值相加,并根据结果设置 cpsr 的标志位
cmn r1, #100 // r1 与100 相加, 并根据结果设置 cpsr 的标志位
cmn w0, #0x1
b.ne 402048 // 如果w0=-1,则顺序执行 -> -1-(-1) = -1+1 = 0
40203c: 97ffff35 bl 401d10 <getopt_long@plt>
402040: 3100041f cmn w0, #0x1*/ // 判断 w0 是否为 -1
while ((c = getopt_long(argc, argv, "aAcC:GhH:nN:pglsStTuUVZ", options, NULL)) != -1)
/*402044: 540002c0 b.eq 40209c <ferror@plt+0x1bc> // b.none // 等于-1, 跳转。说明无参数。
402048: 51010400 sub w0, w0, #0x41 // w0=w0-0x41, 转换成字符
40204c: 7100d01f cmp w0, #0x34 // w0 <= 0x34(52), 大小写字母共52个
402050: 54000089 b.ls 402060 <ferror@plt+0x180>*/ // b.plast (w0<=0x34)
switch (c) {
default:
/*402054: fd242be8 str d8, [sp, #18512]
402058: fd242fe9 str d9, [sp, #18520]
40205c: 940003dd bl 402fd0 <ferror@plt+0x10f0>*/ // exit(1)
usage();
/*402060: 78605b00 ldrh w0, [x24, w0, uxtw #1] // w0=[x24+w0<<1]=[0x419a10+0x20<<1]=[0x419a10+0x40]=[0x419a50]=0x8b
402064: 10000061 adr x1, 402070 <ferror@plt+0x190>
402068: 8b20a820 add x0, x1, w0, sxth #2 // x0=0x402070+w0<<2=0x402070+0x8b<<2=0x402070+0x22c=40229C
40206c: d61f0000 br x0 */ // x0
case 'p':
/*402070: 52800020 mov w0, #0x1 // #1
402074: b90046e0 str w0, [x23, #68] */ // [0x43c870+68]=[0x43C8B4]=1
pids = 1;
case 'c':
/*402078: 9104e3e3 add x3, sp, #0x138 // x3=options
40207c: aa1603e2 mov x2, x22 // "aAcC:GhH:nN:pglsStTuUVZ"
402080: aa1403e1 mov x1, x20 // x1=argv
402084: 2a1303e0 mov w0, w19 // x0=argc
402088: d2800004 mov x4, #0x0 // #0
40208c: b9004abf str wzr, [x21, #72]*/
compact = 0;
/*402090: 97ffff20 bl 401d10 <getopt_long@plt>
402094: 3100041f cmn w0, #0x1 // 如果w0=-1,则顺序执行,即运行到 40209c
402098: 54fffd81 b.ne 402048 <ferror@plt+0x168>*/ // b.any w0 不等于 -1,jump 402048
break;
// 无参数跳转
/*40209c: d00001d6 adrp x22, 43c000 <memcpy@GLIBC_2.17>
4020a0: 51000677 sub w23, w19, #0x1 // w23=argc-1
4020a4: b9484ac0 ldr w0, [x22, #2120] // w0=[0x43C848]=optind