【发布时间】:2010-09-25 21:43:33
【问题描述】:
我正在尝试学习低级开发。通过将 0 放入 ebx 并将 1 放入 eax(用于 exit() 系统调用)并调用 int 0x80,它应该退出程序。 我有一个运行良好的简单 c 程序,但是当我将其粘贴进去时,我没有按预期退出,而是出现了分段错误。为什么会这样?
谢谢!
__asm__ ("xor %ebx, %ebx;"
"mov %al, 1;"
"int $80;"
);
编辑:感谢您的建议,不过还是有段错误。 这是我所做的修改:
__asm__ ("xor %ebx, %ebx;"
"xor %eax, %eax;"
"mov $1, %eax;"
"int $80;"
);
编辑:从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
"
);
感谢您的关注和提供建议。
【问题讨论】:
-
我不知道asm,但是
%al和eax是一样的吗?为什么用“C”标记? -
c 标签在那里,因为它被按原样粘贴到 c 程序中,并用 gcc 编译。
-
请尝试
int $0x80而不是int $80。我很确定十进制表示法是默认值。