linux – 为什么gcc在调用“main”之后在程序中放置一个“halt”指令?
发布时间:2021-01-24 12:11:44 所属栏目:Linux 来源:互联网
导读:当在 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实战:Ubuntu 16.04安装Sublime Text 3
- linux – 如何列出符号链接链?
- Linux内核:来自“open”系统调用的printk不起作用
- 如何从Linux init.d / rc.d脚本中查找错误消息?
- 什么时候需要curl_global_init()?
- linux – 为什么我必须`wait()`用于子进程?
- linux – iwlist()命令如何扫描无线网络?
- /bin/bash^M: bad interpreter: 没有那个文件或目录--转载
- Getting over the dangers of rm command in Linux---refer
- MPD:使用Linux bash脚本接收实际的mpd-status