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

Nis*_*ant 5 linux assembly operating-system termination

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

如果我没有exit在该.text部分中添加系统调用会发生什么?难道导致.data.bss被解释为代码造成"不可预测"的结果吗?程序何时终止 - 可能在执行每条"指令"之后?

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

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

fuz*_*fuz 9

处理器不知道代码的结束位置.它忠实地执行一个接一个的指令,直到执行被重定向到其他地方(例如通过跳转,调用,中断,系统调用或类似操作).如果您的代码在没有跳转的情况下结束,则处理器会继续执行代码后的内存中的任何内容.究竟发生了什么是相当不可预测的,但最终,您的代码通常会崩溃,因为它会尝试执行无效指令或尝试访问不允许访问的内存.如果两者都没有发生并且没有发生跳转,则处理器最终会尝试执行未映射的内存或标记为"不可执行"的内存作为代码,从而导致分段违规.在Linux上,这提出了一个SIGSEGVSIGBUS.未处理时,这些将终止您的流程并可选择生成核心转储.

  • 在 CPU 级别,您所谈论的异常是页面错误(`#PF`),而不是与段相关的。x86 Linux 上的 32 位或 64 位进程以 CS base=0 / limit = unlimited 运行。`SIGSEGV` 中的“分段”基本上与 x86 段无关,因为这不是 x86 Linux 用于内存保护的内容。 (2认同)

归档时间:

查看次数:

649 次

最近记录:

7 年,5 月 前