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

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

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

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

Asm вставка в с++.gnu компилятор

  • Автор темы TnedutS
  • Дата начала
Статус
Закрыто для дальнейших ответов.
T

TnedutS

Здравствуйте!
Достаточно уже долго бьюсь над проблемой, поэтому решил обратиться сюда.
Я пытаюсь применить ассемблерную вставку в с++ ... До этого опыта с этим не было.
Надо по заданию просто.
Применить то я применил... Но как - то криво.
Пишу просто для пробы:
...
void printab(int );
...
int x1 = 1;
asm("pushl %0\n\tcall printab \n\tpop %%eax" : : "r" (x1));
...
Пишет мне
undefined reference to printab. При том, что саму функцию я как раз объявил.


Смотрел в инете. Нашел, например, это:

asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
: /* no outputs */
: "g" (from), "g" (to)
: "r9", "r10");

Но ведь тут тоже _foo неопределена.
Это отсюда:


Смотрел и др. сайты. Примеры одни и те же.

Попытался сделать это подобным образом
asm("pushl %0\n\tcall %1 \n\tpop %%eax" : : "r" (x1),"r"(printab));

Пишет предупреждение
indirect call without '*'
Но работает. Но что значит это предупреждение?
Как от него избавиться?
Объясните пожалуйста, что это значит, и как от этого избавиться.
И (если они есть) другие способы вызова функций.
 
T

TnedutS

Я понимаю, что вопрос чайницкий, но в других форумах мне ничем не помогли. А в интернете я пока ничего не нашел.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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