Name: Anonymous 2011-11-10 13:07
Have you seen original source code for following routine?
_BYTE *__fastcall decodeLZ_sub(_BYTE *Dst, void *Src)
{
_BYTE *D; // esi@1
_BYTE *S; // edi@1
unsigned int i; // ecx@1
char v5; // al@2
_BYTE *R; // esi@2
char v7; // dl@3
char v8; // al@3
__int16 v9; // ax@3
__int16 v10; // ax@5
char v11; // dl@7
char v12; // al@7
_BYTE *v13; // esi@7
unsigned __int8 v14; // dh@7
__int16 v15; // ax@7
__int16 v16; // dx@9
D = Dst;
S = Src;
for ( i = 0; ; S += i )
{
while ( 1 )
{
while ( 1 )
{
while ( 1 )
{
v5 = *D;
R = D + 1;
if ( v5 < 0 )
break;
v7 = v5;
v8 = *R;
D = R + 1;
HIBYTE(v9) = v8;
LOBYTE(v9) = v9 & 0x18;
if ( (_BYTE)v9 )
{
LOBYTE(i) = (unsigned __int8)v9 >> 3;
memcpy(S, D, i);
D += i;
S += i;
i = 0;
}
LOBYTE(i) = (HIBYTE(v9) & 7) + 3;
LOBYTE(v9) = HIBYTE(v9);
v10 = 4 * v9 & 0x380;
LOBYTE(v10) = v7 | v10;
memcpy(S, &S[-(unsigned __int16)(v10 + 1)], i);
S += i;
}
if ( v5 & 0x40 )
break;
v11 = v5;
v12 = *R;
v13 = R + 1;
HIBYTE(v15) = v12;
LOBYTE(v15) = *v13;
D = v13 + 1;
v14 = v15;
LOBYTE(v15) = v15 & 3;
if ( (_BYTE)v15 )
{
LOBYTE(i) = v15;
memcpy(S, D, i);
D += i;
S += i;
i = 0;
}
LOBYTE(i) = (HIBYTE(v15) & 0x1F) + 3;
HIBYTE(v16) = (v14 >> 1) & 0x7E;
LOBYTE(v16) = v11 & 0x3F;
LOBYTE(v15) = HIBYTE(v15);
memcpy(S, &S[-(unsigned __int16)((v16 | 2 * v15 & 0x1C0) + 1)], i);
S += i;
}
if ( v5 & 0x30 )
break;
LOBYTE(i) = 4 * ((v5 & 0xF) + 1);
memcpy(S, R, i);
D = &R[i];
S += i;
}
if ( v5 == -1 )
break;
LOBYTE(i) = v5 & 0xF;
memcpy(S, R, i);
D = &R[i];
}
return R;
}