左键需要作为赋值的左操作数 - LOBYTE / HIBYTE
lvalue required as left operand of assignment - LOBYTE / HIBYTE
我在下面的函数中收到关于 LOBYTE/HIBYTE/LODWORD 行lvalue required as left operand error
:
typedef DWORD _DWORD;
typedef BYTE _BYTE;
typedef WORD _WORD;
signed int __stdcall checkSerial(int serial, int serialLength)
{
int v2; // ecx@1
int v3; // ecx@3
int v4; // ecx@5
int v5; // ecx@7
int v6; // dx@9
signed int v7; // ecx@10
char v8; // dl@11
__int16 v9; // cx@13
signed int result; // eax@21
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 *)(串行 + 1);
例如,这些行导致错误 - 但为什么?LOBYTE 被定义为 LOBYTE(x) ((BYTE)(x)),那么为什么我不能直接投射它呢?
修改值子集的方法是使用布尔运算符,例如:
v9 &= ~255; // mask off low byte (set to 0)
v9 |= *(_BYTE*)serial; // or in the new low byte value
但是,由于您要修改 16 位值的两个字节,最简单的方法是在一个操作中分配它:
v9 = (*(_BYTE*)(*serial + 1) << 8) | (*(_BYTE*)serial);
相关文章:
- 控制允许动态运行c++的并发操作数
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- C++ 带有向量的 IF 计算操作数
- 是否所有C++运算符都接受操作数?
- 一元*运算符的操作数是否期望一个 prvalue
- 与'operator='不匹配(操作数类型'String'且"void")
- 不正确的操作数类型 MSVC
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- 没有运算符"="与这些操作数匹配,JUCE 窗口演示应用程序
- 如果我在指针中使用 ++ 操作数,我的值就会出错
- 二进制表达式的操作数无效 - 使用 for 和迭代器
- C2679 二进制"<<":未找到采用右操作数类型的运算符
- CPP 运算符重载操作数位置 [] 与 ==
- int* 和 int[] 类型对二进制运算符 + 的操作数无效
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- 运算符'<'不能应用于类型 'string' 和 'string' 的操作数
- 左键需要作为赋值的左操作数 - LOBYTE / HIBYTE