逆向积累
1.字符串相等
这里i64相当于LL
0i64=0LL,1i64=1LL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| __int64 __fastcall equal(_QWORD *a1, _QWORD *a2) { __int64 v2 int v4 unsigned __int64 i
v2 = sub_425120(a1) if ( v2 != sub_425120(a2) ) return 0i64 for ( i = 0i64 { v4 = *(_DWORD *)sub_425200(a1, i) if ( v4 != *(_DWORD *)sub_425200(a2, i) ) return 0i64 } return 1i64
|
1 2 3 4
| __int64 __fastcall sub_425120(_QWORD *a1) { return (__int64)(a1[1] - *a1) >> 2; }
|
这个函数获取了a1这个数组第一项和第0项的差值,如果差值都不相等,那就不用比了
1 2 3 4
| __int64 __fastcall sub_425200(_QWORD *a1, __int64 a2) { return 4 * a2 + *a1; }
|
这个是计算第a2个位置的地址
回顾之前的比较函数:
1 2 3 4 5 6
| for ( i = 0i64 { v4 = *(_DWORD *)sub_425200(a1, i) if ( v4 != *(_DWORD *)sub_425200(a2, i) ) return 0i64 }
|
功能:
- 使用 sub_425200(a1, i) 获取数组 a1 中第
i 个元素的地址
- 使用 *(_DWORD *) 将该地址解释为32位整数指针并取值
- 对数组 a2 执行相同操作
- 比较两个值是否相等