栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

程序启动时(asm,linux)的默认寄存器状态是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

程序启动时(asm,linux)的默认寄存器状态是什么?

这完全取决于每个平台的ABI。既然您提到了

eax
ebx
让我们看看x86的情况是什么。在
fs/binfmt_elf.c
内部的#972行中
load_elf_binary()
,内核检查ABI
在程序加载时是否对寄存器值指定了任何要求:

然后调用

ELF_PLAT_INIT
,这是为中的每个体系结构定义的宏
arch/xxx/include/elf.h
。对于x86,它执行以下操作:

#define ELF_PLAT_INIT(_r, load_addr)            do {           _r->bx = 0; _r->cx = 0; _r->dx = 0;         _r->si = 0; _r->di = 0; _r->bp = 0;         _r->ax = 0;       } while (0)

因此,当您将静态链接的ELF二进制文件加载到Linux x86上时,您可以指望所有等于零的寄存器值。不过,这并不意味着您应该这样做。:-)


动态链接

请注意,执行 动态 链接的二进制文件实际上会在执行到达您的

_start
(ELF入口点)之前在您的进程中运行动态链接程序代码。
这可以并且确实在ABI的允许下在寄存器中留下垃圾。 当然,除了堆栈指针ESP / RSP和
atexit
挂钩EDX / RDX。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399114.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号