当前位置: 首页 > 面试题库 >

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

后焕
2023-03-14
问题内容

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

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

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

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


问题答案:

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



 类似资料:
  • 在我的应用程序中,我有一个Spring线程调度程序池,用于在未来的特定时间运行不同的Cron作业。我有足够日志记录的Cron作业来告诉它做了什么。我注意到有时这些作业没有在应该运行的时间执行。我已经验证了这些作业是添加到调度程序队列中的。所以我怀疑如果我的调度程序池已满并且没有任何空闲线程,那么它就无法在特定时间调度作业。当Spring在池中找到任何空闲线程时,它不应该运行这种延迟的作业吗?或者它

  • 问题内容: 我们如何直接在x86 Linux中使用sysenter / syscall来实现系统调用?有人可以提供帮助吗?如果您还可以显示amd64平台的代码,那就更好了。 我知道在x86中,我们可以使用 间接路由到sysenter。 但是,我们如何直接使用sysenter / syscall进行编码以发出系统调用? 我找到了一些资料http://damocles.blogbus.com/tag/

  • 我注意到,在这个javadoc中,https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.UncaughtExceptionHandler.htmlUncaughtExceptionHandler用于发生异常但未被捕获的情况。但是,那个线程会悄悄地失败吗?我想是的,因为它是异步进行业务的,但我正在调查我们的一个进程的相关问题,我很惊讶现

  • 问题内容: 操作系统是否正确处理? 还是我必须打电话给flock()? 问题答案: 虽然OS不会崩溃,并且文件系统不会被破坏,呼叫被 不 保证的广告是原子的,除非有问题的文件描述符是一个管道,数据的写入量字节或更少。标准的相关部分: 尝试写入管道或FIFO具有几个主要特征: * 原子/非原子:如果一个操作中写入的总量未与任何其他进程的数据交错,则写入是原子的。当有多个作者将数据发送到单个读者时,此

  • 在经典ASP中,如果页面遇到未捕获的异常并在提交/回滚之前停止,连接事务会发生什么情况? 例如: 鉴于事务正在进行中,是否会中止或提交?或者,当事务返回到连接池时,连接是否会维护该事务?

  • 本文向大家介绍Android开发退出程序的方法汇总,包括了Android开发退出程序的方法汇总的使用技巧和注意事项,需要的朋友参考一下 Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面呐喊教程小编就给大家介绍android开发退出程序的几种方法。 1、finish()方法 f