1. op1 = 47, op2 = 24 第一次分析的时候是对的,
.text:000000000000411C ADD W11, W23, #0xCD0 ; jumptable 0000000000003360 case 24 W23 = 0x0400032F, W11 = W23 & 0xCD0 = 0
.text:0000000000004124 ADD W12, W23, #0x340 W12 = W23 + 0x340 = 0x0400066F
后来又重复分析了一下, 然后就错了. 把 ADD 看成 AND 了:
.text:000000000000411C ADD W11, W23, #0xCD0 ; jumptable 0000000000003360 case 24 W23 = 0x0400032F, W11 = W23 & 0xCD0 = 0
.text:0000000000004124 ADD W12, W23, #0x340 W12 = W23 & 0x340 = 0x300
2.
00000074 00000C6F 47(0x2F) 49(0x31) NOP ;LSL X0, X0, #0
00000070 002000CF 15(0x0F) -------- B.EQ X0,X1,#0x80 如果大于则跳转到虚拟 PC 0x80处。
0000007C 01A0003B 59(0x3B) -------- STR X0, [X13, #0x0] 否则 新长度赋值为 0,表示处理失败
00000078 08000C6A 42(0x2A) -------- B 0x284 跳转到 虚拟 PC 0x284处执行
反编译的时候, 你为什么调整指令的顺序, 即 74 -> 70 -> 7C -> 78? 后面还有几次.
3.
.text:0000000000004BC4 CMP X9, #0x20
.text:0000000000004BC8 B.CS loc_4BD4 相等跳转
这里错了, 应该是大于时候跳转.
4. 00000070 002000CF 15(0x0F) -------- B.EQ X0,X1,#0x80
00000250 0040014F 15(0x0F) -------- B.HI #0x268 ;X0, X2, $0x14
00000078 08000C6A 42(0x2A) -------- B 0x284
00000260 0800072A 42(0x2A) -------- B 0x230
这个跳转地址如何分析出来的, 我知道是控制变量[X19,#-0x20] == 2 时候, 是call; 但是等于1,3时候, X0的地址如何计算的,搞不清楚,中间跳了好几次....
5. 还有个小错误, ORR X1 X2 X3, 后面的X2和X3的位置写反了, 虽然不影响结果.
最后于 2025-7-3 18:44
被三草儿编辑
,原因: