我有Ghidra的C代码片段,但我不太清楚它在做什么。我怀疑某种根源,也许吗?
传入的两个arg是平方和(有时2有时是3个项),以及一个额外的值,例如0x18、0x10或0(有时不存在此arg!)
uint FUN_80059070(uint param_1,uint param_2)
{
uint uVar1;
uint uVar2;
uint uVar3;
uint uVar4;
uint uVar5;
uint uVar6;
uVar5 = 0;
uVar4 = 1;
uVar6 = 0;
uVar3 = 1 << (param_2 & 0x1f);
while ((uVar3 < param_1 && (uVar3 << 2 != 0))) {
uVar4 = uVar4 + 1;
uVar3 = uVar3 << 2;
}
uVar1 = 1 << (uVar4 + (param_2 - 1) & 0x1f);
while (uVar3 != 0) {
uVar2 = uVar5 << (uVar4 & 0x1f);
if ((int)uVar4 < 0) {
uVar2 = uVar5 >> (-uVar4 & 0x1f);
}
uVar2 = uVar2 + uVar6 + uVar3;
if (uVar2 <= param_1) {
uVar5 = uVar5 + uVar1;
uVar6 = uVar2;
}
uVar1 = uVar1 >> 1;
uVar3 = uVar3 >> 2;
uVar4 = uVar4 - 1;
}
return uVar5;
}