我有一个反编译函数,想要编译它的源代码。问题出在LOBYTE声明中: 在每一行上得到“错误:左值作为赋值的左操作数”:
LOBYTE(v9) = ((_BYTE)v12 + (v7 ^ v13)) & 0x1F;
请提示解决方法。
答案 0 :(得分:3)
假设v9
是算术类型的对象(问题没有明确说明所涉及的不同标识符/宏的声明),并且系统是little-endian:
#define LOBYTE(x) (*(unsigned char *) &(x))
允许LOBYTE
运算符左侧的=
。
答案 1 :(得分:0)
我不认为LOBYTE
是一个你可以追求一些价值的变量。它是MACRO
,它自己返回一个值。在你的作品中,你在[预处理]
5 = 2 * 3
这是不可能的。您在作业=
运算符的LHS上需要一些可写内存。
在您的情况下,LOBYTE
的可能实施是#define LOBYTE(x) ((unsigned char) ((x) & 0xff))
,而不是lvalue
。这就是错误存在的原因。
编辑:
关于"如何解决"部分[对不起第一个回答],你需要提供左值作为LOBYTE的结果。
只需添加ouah的答案,您就可以执行类似
的操作#define LOBYTE(x) (*(uint8_t *) &(x))
生成所需的左值。