Цитата:
там тоже было такое чтение строк и странные операции с длиной строки
|
ну судя по тому что я отреверсил, то получается так:
Код:
char __thiscall CDataStore__GetSizedString2(int this, int a2, int a3, char a4)
{
int v4; // edi@1
int v5; // esi@1
v4 = a3;
v5 = this;
if ( a3 )
{
if ( a3 == 1 ) // ответ на вопрос с лишним байтом
{
*(_DWORD *)(this + 4) &= 0xFE000000u;
*(_DWORD *)this = &unk_D115FF;
}
else
{
CDataStore__GetData(a2, (int)&a3, a3);
if ( !a3 || *(_BYTE *)(v4 - 1 + a3) )
return 0;
if ( a4 )
{
*(_DWORD *)v5 = a3;
*(_DWORD *)(v5 + 4) = *(_DWORD *)(v5 + 4) & 0xFE000000 | (unsigned int)&unk_FFFFFF & (v4 - 1);
}
else
{
sub_A45D2C((void *)v5, a3, v4 - 1);
}
}
}
return 1;
}
сделал так:
Код:
public string ReadString2(int m_size)
{
if (m_size <= 1)
return string.Empty;
var str = Encoding.UTF8.GetString(buffer, index, m_size - 1);
index += (int)m_size;
return str;
}
в итоге все прочиталось без мусора,
прикладываю исходники