linux – 为什么gcc在调用“main”之后在程序中放置一个“halt”指令?

linux – 为什么gcc在调用“main”之后在程序中放置一个“halt”指令?,第1张

概述当在 Linux / i386系统上看到由gcc生成的精灵可执行文件时,似乎在调用“main”之后,在“nop”填充之前,它会放置一个停止指令(0xf4),例如: │ ....... ! entrypoint:│ ....... ! xor ebp, ebp│ 80482e2 ! pop esi│ 80482e3 ! mov ecx 当在 Linux / i386系统上看到由gcc生成的精灵可执行文件时,似乎在调用“main”之后,在“nop”填充之前,它会放置一个停止指令(0xf4),例如:
│ ....... ! entrypoint:│ ....... !   xor         ebp,ebp│ 80482e2 !   pop         esi│ 80482e3 !   mov         ecx,esP*emphasized text*│ 80482e5 !   and         esp,0fffffff0h│ 80482e8 !   push        eax│ 80482e9 !   push        esp│ 80482ea !   push        edx│ 80482eb !   push        __libc_csu_fini│ 80482f0 !   push        __libc_csu_init│ 80482f5 !   push        ecx│ 80482f6 !   push        esi│ 80482f7 !   push        main│ 80482fc !   call        wrapper_804a004_80482c4│ 8048301 !   hlt                                      <--- halt instruction│ 8048302 !   nop│ 8048303 !   nop│ 8048304 !   nop               ⋮

这是什么目的?
不应该达到此代码.这是一种保障措施吗?

解决方法 主要返回后,退出将被调用.如果系统的退出版本没有立即停止该进程的执行,那么hlt就是这样.在用户模式下,会导致保护故障,这将导致进程死机.如果进程由于某种原因在环0中运行,则只会停止处理器直到下一个中​​断,这将有助于触发 *** 作系统删除进程.在设计为在环0中运行的进程中,通常在hlt之后有一个jmp指令,这将导致hlt一直执行,直到进程终止. 总结

以上是内存溢出为你收集整理的linux – 为什么gcc在调用“main”之后在程序中放置一个“halt”指令?全部内容,希望文章能够帮你解决linux – 为什么gcc在调用“main”之后在程序中放置一个“halt”指令?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1048856.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存