加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:20:55 所属栏目:Linux 来源:网络整理
导读:在汇编程序中,.text加载为0x08048000.之后是.data和.bss部分. 如果我没有在.text部分放置退出系统调用,会发生什么?是否会导致.data和.bss被解释为导致“不可预测”结果的代码?程序何时终止 – 可能在执行每条“指令”之后? 我可以很容易地编写一个没有退
在汇编程序中,.text加载为0x08048000.之后是.data和.bss部分.

如果我没有在.text部分放置退出系统调用,会发生什么?是否会导致.data和.bss被解释为导致“不可预测”结果的代码?程序何时终止 – 可能在执行每条“指令”之后?

我可以很容易地编写一个没有退出系统调用的程序,但测试.data和.bss是否会执行是我仍然不知道的事情,因为我想我必须知道在引擎盖下生成的真实机器代码嘲笑那个.

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读