получилось пока что следующее:
эта функция всего-то читает
cшную строку без последнего символа (\0) по размеру считанному выше.
Код:
internal string ReadString2(int m_size)
{
if (this.RemainigLength < m_size)
throw new ArgumentOutOfRangeException("m_size");
var size = m_size > 0 ? m_size - 1 : 0;
var str = Encoding.UTF8.GetString(buffer, index, size);
index += m_size;
return str;
}
но пока что смущает этот кусок:
Код:
while ( 1 )
{
v21 = *(_DWORD *)(v3 + 64);
if ( v21 == -1 )
v21 = *(_DWORD *)(v3 + 48);
if ( a3 >= v21 )
break;
a2 = 0;
CDataStore__GetInt32(v11, (int)&a2);
v22 = sub_7DA455(v3 + 48, a3++);
*(_DWORD *)v22 = a2;
}
на сколько мне понятно, тут считывается 4 байта до тех пор пока не наступит конец потока, но остаток не всегда кратное 4