У меня есть декомпилированная функция и вы хотите скомпилировать ее источник. Проблема заключается в операторах LOBYTE: получить "error: lvalue, требуемый как левый операнд присваивания" в каждой строке:
LOBYTE(v9) = ((_BYTE)v12 + (v7 ^ v13)) & 0x1F;
Подскажите обходной путь, пожалуйста.
Предполагая, что v9
является объектом арифметического типа (вопрос не содержит явных заявлений о различных идентификаторах/макросах), а система малозначна:
#define LOBYTE(x) (*(unsigned char *) &(x))
позволит LOBYTE
в левой части оператора =
.
Я не думаю, что LOBYTE
- это какая-то переменная, в которой вы можете получить некоторое значение. Это MACRO
который возвращает само значение. В effet вы пишете что-то похожее на [после предварительной обработки]
5 = 2 * 3
что невозможно. Вам понадобится записываемая память на LHS оператора присваивания =
.
В вашем случае возможная реализация LOBYTE
: #define LOBYTE(x) ((unsigned char) ((x) & 0xff))
, которая не является значением lvalue
. Вот почему ошибка есть.
РЕДАКТИРОВАТЬ:
Что касается "как решить" часть [извините за отсутствие в первом ответе], вам необходимо предоставить lvalue в качестве результата LOBYTE.
Чтобы добавить к ответу ouah, вы можете сделать что-то вроде
#define LOBYTE(x) (*(uint8_t *) &(x))
для получения требуемого значения l.
LOBYTE
?