Я получаю lvalue required as left operand error
на LoByte/HiByte/LODWORD линиях в функции ниже:именующий требуется в качестве левого операнда назначения - LoByte/HiByte
typedef DWORD _DWORD;
typedef BYTE _BYTE;
typedef WORD _WORD;
signed int __stdcall checkSerial(int serial, int serialLength)
{
int v2; // [email protected]
int v3; // [email protected]
int v4; // [email protected]
int v5; // [email protected]
int v6; // [email protected]
signed int v7; // [email protected]
char v8; // [email protected]
__int16 v9; // [email protected]
signed int result; // [email protected]
v2 = 0;
do
{
*(_DWORD *)(v2 + serial) ^= 0x1234567u;
*(_BYTE *)(v2 + serial) &= 0xEu;
v2 += 4;
}
while (v2 != 8);
v3 = 0;
do
*(_BYTE *)(serial + 8) += *(_BYTE *)(v3++ + serial);
while (v3 != serialLength);
v4 = 0;
do
{
*(_DWORD *)(v4 + serial) ^= 0x89ABCDEu;
*(_BYTE *)(v4 + serial) &= 0xEu;
v4 += 4;
}
while (v4 != 8);
v5 = 0;
do
*(_BYTE *)(serial + 9) += *(_BYTE *)(v5++ + serial);
while (v5 != serialLength);
LOBYTE(v6) = *(_BYTE *)(serial + 9);
HIBYTE(v6) = *(_BYTE *)(serial + 8);
if (v6 != 0x42DE)
goto LABEL_25;
v7 = 9;
do
{
v8 = *(_BYTE *)(v7 + serial)^*(_BYTE *)(v7 + serial);
--v7;
}
while ((_WORD)v7);
if ((*(_WORD *)(serial + 8)^0xEEEE) != 0x30AC)
goto LABEL_25;
LOBYTE(v9) = *(_BYTE *)serial;
HIBYTE(v9) = *(_BYTE *)(serial + 1);
if (v9 != 0xB008u)
goto LABEL_25;
if (*(_DWORD *)serial != 0x7A81B008)
goto LABEL_25;
LOWORD(v7) = 0;
do
{
v8 ^= 0xAu;
v7 += 4;
}
while (v7 <= 12);
if (*(_DWORD *)(serial + 4) != 0x388DBF02
|| *(_BYTE *)(serial + 5) != 191
|| *(_BYTE *)(serial + 6) != 141
|| *(_BYTE *)(serial + 5) != 191)
LABEL_25:
result = 1;
else
result = 0;
return result;
}
LoByte (v9) = * (_ BYTE *) последовательный; HIBYTE (v9) = * (_ BYTE *) (serial + 1);
например. эти строки вызывают ошибку, но почему? LOBYTE определяется как LOBYTE (x) ((BYTE) (x)), так почему я не могу просто бросить его?
Назначьте оба байта за один раз, используя shift ops –