gpt4 book ai didi

linux - 不中断 assembly 时出现段错误

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

我对某些事情感到困惑,我是新手,正在学习 GNU/Linux 上的汇编,如果你使用了 movl 指令并且没有中断(终止)程序,它会触发一个段错误。
澄清一下,我为此编写的程序唯一要做的就是通过系统调用退出。

为什么要这样做?我的意思是,为什么当出现中断时,它不被视为“正在访问不允许访问的内存”?

编辑:我并没有试图通过这个做任何事情,这是一个出于混淆结果的问题,但这里是代码:

movl $1, %eax
movl $2, %ebx
#int $0x80 (if you remove the comment, it won't trigger a segmentation fault error, even though now we are using registers normally)

最佳答案

我认为您看到的是由于程序没有正确退出而导致的段错误。

一旦开始执行,CPU 就不知道程序有多长,因此需要 hlt 或系统调用来更改控制流并实际退出程序。因此,当您删除 syscall 指令(并因此退出程序)时,CPU 会继续执行。问题是,您没有指定将要执行的内容,而是当前正在执行的内存中的内容。从那里,您有两种可能的结果:段错误(如您所见),因为 CPU 递增超过了有效内存的某个点,或者非法指令,因为内存的某种组合实际上转换为无效的操作码。

关于linux - 不中断 assembly 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21148523/

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