Някаква идея какво точно прави тази подпрограма:
// Address range: 0x108c2 - 0x108db
int32_t function_108c2(int32_t * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7) {
int32_t v1 = (int32_t)a1;
*a1 = v1;
*(int32_t *)(v1 + 4) = a3;
*(int32_t *)(v1 +
= a4;
*(int32_t *)(v1 + 12) = g226;
*(int32_t *)(v1 + 16) = g227;
*(int32_t *)(v1 + 20) = g228;
*(int32_t *)(v1 + 24) = g229;
return v1 + 28;
}
// Address range: 0x108dc - 0x10997
int32_t cal_digest_context(int32_t a1, char * a2, int32_t a3, int32_t a4, int32_t a5) {
int32_t v1 = (int32_t)a2;
int32_t v2 = v1; // R1
int32_t v3 = g228; // 0x108dc
int32_t v4 = g229; // 0x108dc
int32_t v5 = 1; // R5
g228 = 142;
g229 = 2;
int32_t v6 = 92; // R3
int32_t v7 = v1; // 0x10906
int32_t v8 = 1; // 0x10902
int32_t v9 = 142; // 0x108fe
int32_t v10 = 2; // 0x10904
int32_t v11 = &g6; // 0x10902
int32_t v12 = 174; // 0x108f4
int32_t v13 = 92; // 0x108f4
// branch -> 0x108f4
while (true) {
int32_t v14 = v13 ^ v12; // 0x108f4
int32_t v15 = (int32_t)*(char *)(v11 + 19) ^ v14; // 0x108f8
char v16 = v15;
if (v10 == 1) {
// 0x108fe
v16 = v15 ^ v9;
// branch -> 0x10900
}
// 0x10900
g229 = v10 - 1;
*(char *)v7 = v16;
int32_t v17 = g228; // 0x10908
int32_t v18 = v5 + v2; // 0x1090a
v2 = v18;
int32_t v19 = v6 - 1; // 0x1090c
v6 = v19;
int32_t v20 = g229; // 0x1090e
int32_t v21 = v20; // 0x108fa5
if (v20 == 0) {
// 0x10912
g229 = 2;
v21 = 2;
// branch -> 0x10914
}
int32_t v22 = v17 + 169; // 0x10914
g228 = v22;
if (v19 == 0) {
// 0x1091a
g220 = v1;
g228 = v3;
g229 = v4;
return 0;
}
int32_t v23 = v11 + v8;
v7 = v18;
v8 = v5;
v9 = v22;
v10 = v21;
v11 = v23;
v12 = v14 + 188 ^ v17;
v13 = v19;
// branch -> 0x108f4
}
}