char v29[16];
unsigned __int8 v39;
memset(&v39, 0, 8u);
memset(v29, 0, 0x10u);
do
{
*(&v39 + v10) = v29[v10];
++v10;
}
while ( v10 != 8 );
Since this is decompiled code, I assume that the original code might looke like this:
{
char v29[16];
int8_t v39[8];
memset(&v39, 0, sizeof (v39));
memset(v29, 0, sizeof(v29));
for(int i = 0; i < sizeof(v39); i++)
{
((char *)(&v39))[i] = v29[i];
}
}
Which would mean that you have an array of binary bytes, converted to a binary value, ignoring machine byte order, so it might be that this is only part of the code, or the array already is in the correct byte order.
The reason why v10 is not declared or initialized MIGHT be, that the compiler optimized code by reusing a register knowing that it has to be zero from the previous call to memset. But this is only an assumption.
The code is still pretty useless IMO, because the result will always be zero as the array is initialized with 0.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…