如何让 gcc/g++ 接受像 LOBYTE(v15) = someExpression 这样的表达式
How to make gcc/g++ accept expressions like LOBYTE(v15) = someExpression?
我有一个反编译函数,想要编译它的源代码。问题出在 LOBYTE 语句上:在每一行上获取"错误:左值需要作为赋值的左操作数",如下所示:
LOBYTE(v9) = ((_BYTE)v12 + (v7 ^ v13)) & 0x1F;
请提示解决方法。
假设v9
是算术类型的对象(该问题没有明确声明所涉及的不同标识符/宏),并且系统是小端序:
#define LOBYTE(x) (*(unsigned char *) &(x))
将允许LOBYTE
在=
运算符的左侧。
我不认为LOBYTE
是某个变量,你可以在其中获得一些价值。它是一个返回值本身的MACRO
。实际上,您正在编写一些类似于[预处理后]
5 = 2 * 3
这是不可能的。您将需要在赋值=
操作员的 LHS 上有一些可写内存。
在您的情况下,LOBYTE
的可能实现是 #define LOBYTE(x) ((unsigned char) ((x) & 0xff))
,这不是一个lvalue
。这就是错误存在的原因。
编辑:
关于"如何解决"部分[抱歉在第一个答案中丢失],您需要提供左值作为LOBYTE的结果。
只是为了补充一下ouah的答案,你可以做一些类似的事情
#define LOBYTE(x) (*(uint8_t *) &(x))
以产生所需的左值。