RtlpWalkWowStack
CHAR __fastcall RtlpWalkWowStack(
INT64 a1,
UINT64 *a2,
INT64 a3,
UINT64 *a4,
UINT64 a5,
UINT64 a6,
UINT64 a7,
UINT64 a8){
unsigned int v10;
unsigned int v11;
unsigned int v12;
unsigned int i;
unsigned int v14;
char j;
BOOL v16;
unsigned int v17;
unsigned __int64 v18;
CHAR v20;
unsigned int v21;
v20 = 1;
v10 = *(_DWORD *)(a3 + 8196);
v21 = v10;
if( v10 <= (unsigned int)a8 )
return 0;
if( (a8 & 3) != 0 )
ExRaiseDatatypeMisalignment();
if( (unsigned int)a8 + (unsigned __int64)(v10 - (unsigned int)a8) < (unsigned int)a8 )
MEMORY[0x7FFFFFFF0000] = 0;
v11 = *(_DWORD *)a4;
if( a2 )
{
if( (unsigned int)a5 > v11 )
{
if( v11 >= (unsigned int)a6 )
{
*(_QWORD *)(a1 + 8i64 * (v11 - (unsigned int)a6)) = *(unsigned int *)a2;
v11 = *(_DWORD *)a4;
}
*(_DWORD *)a4 = ++v11;
}
}
else
{
v12 = a8;
for( i = 0; i < 2 && v11 < (unsigned int)a5 && v12 < v10 && v12 >= (unsigned int)a8 && v10 - v12 >= 4; ++i )
{
if( v11 >= (unsigned int)a6 )
*(_QWORD *)(a1 + 8i64 * (v11 - (unsigned int)a6)) = *(unsigned int *)v12;
v12 += 4;
++v11;
}
*(_DWORD *)a4 = v11;
if( v11 >= (unsigned int)a5 )
return v20;
}
v14 = a7;
for( j = 1; v11 < (unsigned int)a5 && v14 < v10; j = 0 )
{
if( j )
{
v16 = v14 < (unsigned int)a8;
}
else
{
if( v14 <= (unsigned int)a8 )
break;
v16 = 0;
}
if( v16 )
break;
if( v10 - v14 < 8 )
break;
v17 = *(_DWORD *)v14;
v18 = *(unsigned int *)(v14 + 4i64);
if( (unsigned int)v18 < v10 && (unsigned int)a8 <= (unsigned int)v18 )
break;
if( v18 >= *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1496i64) || (unsigned int)v18 < 0x10000 )
break;
if( v11 >= (unsigned int)a6 )
*(_QWORD *)(a1 + 8i64 * (v11 - (unsigned int)a6)) = *(unsigned int *)(v14 + 4i64);
if( v14 >= v17 || (v10 = v21, v17 >= v21) )
{
++v11;
break;
}
v14 = v17;
++v11;
}
*(_DWORD *)a4 = v11;
return v20;
}Referenced by:
RtlpWalkFrameChain