Я пытаюсь освоить низкоуровневую разработку.Помещая 0 в ebx и 1 в eax (для системного вызова exit ()) и вызывая int 0x80, он должен выйти из программы.У меня есть простая программа на c, которая работает нормально, но когда я вставляю ее, вместо того, чтобы выйти, как ожидалось, я получаю ошибку сегментации.Почему это происходит?
СПАСИБО!
__asm__ ("xor %ebx, %ebx;"
"mov %al, 1;"
"int $80;"
);
edit: спасибо за совет, все же ничего, кроме ошибок сегмента.Вот изменения, которые я сделал:
__asm__ ("xor %ebx, %ebx;"
"xor %eax, %eax;"
"mov $1, %eax;"
"int $80;"
);
edit: после изменения этого примера с http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
asm("movl $1,%%eax; /* SYS_exit is 1 */
xorl %%ebx,%%ebx; /* Argument is in ebx, it is 0 */
int $0x80" /* Enter kernel mode */
);
Это, наконец, сработало для меня:
asm(" movl $1,%eax;
xorl %ebx,%ebx;
int $0x80
"
);
спасибо за просмотр и предложение советов.