• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Ошибка компилятора Gcc. Требуется помощь.

  • Автор темы alx
  • Дата начала
A

alx

собственно скачал драйвера для некого железа. не могу собрать.
есть файл.h
там такой фрагмент кода:
<!--shcode--><pre><code class='с'>#define AE531X_DESC_SWPTR_GET(ptr) \
(void *)(*(volatile UINT32 *) ((UINT32)ptr + AE531X_DESC_SWPTR))

#define AE531X_DESC_SWPTR_SET(ptr,val) \
AE531X_DESC_SWPTR_GET(ptr) = (void *)(val)[/CODE]
и в самой программке
...........
<!--shcode--><pre><code class='с'>AE531X_DESC_SWPTR_SET(txDesc, TxBuf);[/CODE]
вызывает ошибку компилятора error: lvalue required as left operand of assignment...
понимаю, что после преобразований define код получится страшным, но знаний не хватает...
 
K

korisk

собственно скачал драйвера для некого железа. не могу собрать.
есть файл.h
там такой фрагмент кода:
<!--shcode--><pre><code class='с'>#define AE531X_DESC_SWPTR_GET(ptr) \
(void *)(*(volatile UINT32 *) ((UINT32)ptr + AE531X_DESC_SWPTR))

#define AE531X_DESC_SWPTR_SET(ptr,val) \
AE531X_DESC_SWPTR_GET(ptr) = (void *)(val)[/CODE]
и в самой программке
...........
<!--shcode--><pre><code class='с'>AE531X_DESC_SWPTR_SET(txDesc, TxBuf);[/CODE]
вызывает ошибку компилятора error: lvalue required as left operand of assignment...
понимаю, что после преобразований define код получится страшным, но знаний не хватает...

Получается что-то типа
(void *)(*(volatile UINT32 *) ((UINT32)txDesc + AE531X_DESC_SWPTR)) = (void *)(TxBuf)

чтобы посмотреть во что превращается код можно использовать опцию -E (gcc -E main.c), которая выдает код после разворачивания макросов.

Проблема скорее всего в типе txDesc. Покажите описание переменных.

С уважением.
 
K

korisk

Все во вложении. Файл ae531xecos.c в архиве.Посмотреть вложение 3417
Интересно для чего проект?
Экзотическая ось такая ) eCos.
А по сути..
Возможно стоит более свежую версию скачать :).

Ещё вариант убрать в макросе:
<!--shcode--><pre><code class='С'>#define AE531X_DESC_SWPTR_GET(ptr)[/CODE]

преобразование (void *), так чтобы получилось
<!--shcode--><pre><code class='С'>#define AE531X_DESC_SWPTR_GET(ptr) \
(*(volatile UINT32 *) ((UINT32)ptr + AE531X_DESC_SWPTR))[/CODE]

Преобразование типа левой части операции присваивания запрещено в современных версиях gcc. (в 4.4) точно.
Так что либо используйте старый gcc, либо ищите новый драйвер, либо правьте согласно рецепту, но там наверное ещё много чего вылезет )


Удач. :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!