一尘不染

如果汇编程序中没有退出系统调用,会发生什么?

linux

在汇编程序中,将在.text处加载0x08048000。在.data.bss部分来之后。

如果我没有exit在本.text节中进行系统调用,会发生什么?它会导致.data.bss被解释为导致“不可预测的”结果的代码吗?程序何时终止-
大概在执行每个“指令”之后?

我可以很容易地编写一个程序没有exit系统调用,但如果测试的.data.bss将得到执行是我仍然不知道,因为我想我会知道那是在最罩产生的嘲笑,真正的机器代码。

我认为这个问题更多的是关于CPU和操作系统如何处理这种情况,而不是汇编语言。


阅读 390

收藏
2020-06-03

共1个答案

一尘不染

处理器不知道您的代码在哪里结束。它忠实地执行一条指令,直到另一条指令被重定向到其他位置为止(例如,通过跳转,调用,中断,系统调用等)。如果代码结束而没有跳到其他地方,则处理器将在代码执行后继续执行内存中的所有内容。确切的结果是无法预测的,但是最终,您的代码通常会崩溃,因为它试图执行无效的指令或试图访问不允许访问的内存。如果两者均未发生且没有跳转发生,则处理器最终将尝试执行未映射的内存或标记为“不可执行”的代码的内存,从而导致分段冲突。在Linux上,这会引发一个SIGSEGVSIGBUS。如果不处理,它们将终止您的进程并有选择地产生核心转储。

2020-06-03