如果汇编程序中没有退出系统调用,会发生什么?
在汇编程序中,将在.text
处加载0x08048000
。在.data
与.bss
部分来之后。
如果我没有exit
在本.text
节中进行系统调用,会发生什么?它会导致.data
和.bss
被解释为导致“不可预测的”结果的代码吗?程序何时终止-
大概在执行每个“指令”之后?
我可以很容易地编写一个程序没有exit
系统调用,但如果测试的.data
和.bss
将得到执行是我仍然不知道,因为我想我会知道那是在最罩产生的嘲笑,真正的机器代码。
我认为这个问题更多的是关于CPU和操作系统如何处理这种情况,而不是汇编语言。
回答:
处理器不知道您的代码在哪里结束。它忠实地执行一条指令,直到另一条指令被重定向到其他位置为止(例如,通过跳转,调用,中断,系统调用等)。如果代码结束而没有跳到其他地方,则处理器将在代码执行后继续执行内存中的所有内容。确切的结果是无法预测的,但是最终,您的代码通常会崩溃,因为它试图执行无效的指令或试图访问不允许访问的内存。如果两者均未发生且没有跳转发生,则处理器最终将尝试执行未映射的内存或标记为“不可执行”的代码的内存,从而导致分段冲突。在Linux上,这会引发一个SIGSEGV
或SIGBUS
。如果不处理,它们将终止您的进程并有选择地产生核心转储。
以上是 如果汇编程序中没有退出系统调用,会发生什么? 的全部内容, 来源链接: utcz.com/qa/404328.html