gpt4 book ai didi

linux - 为什么这会产生段错误?它应该只是退出

转载 作者:太空宇宙 更新时间:2023-11-04 09:08:48 24 4
gpt4 key购买 nike

我正在尝试学习底层开发。通过将 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
"
);

感谢您查看并提供建议。

最佳答案

您确定 eax 的其余部分已清除吗?尝试将 1 移动到 eax 而不仅仅是 al 或者至少先清除它。

__asm__ ("xor %ebx, %ebx;"
"mov $1, %eax;"
"int $0x80;"
);

编辑:如果 AndiDog 关于 AT&T 语法的正确性。

编辑:我已经有一段时间没用汽油了,但 8016$0x80$80 是 8010。这应该可以解决最后一个问题。

关于linux - 为什么这会产生段错误?它应该只是退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3795699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com