java 程序头_ELF文件中的程序头和节头

节是文件的最小连续区域 . 所以ELF文件被细分为几个部分 . 段不能重叠,也就是说,没有字节可能是多个段的一部分 . 但是可能存在不属于任何部分的字节("garbage") .

部分通常用于链接目的 . 它们包含文件的不同部分,可以通过链接器重新排列,合并等 .

但是可执行文件也可以包含部分 - 描述文件的内容,以及每段代码或数据的开始位置 . 共享对象也使用部分 . 那些包含用于动态链接的符号表和类似的东西 .

ELF文件中包含的所有部分都在Section Headers Table中描述,每个部分都有一个条目 .

但是为了制作可执行文件,你还需要其他东西:细分 . 这些告诉加载器应该将文件的哪些部分加载到内存和哪些地址 . 因此,段映射到可执行进程的内存空间 . 它们可以包含代码和数据,因此 segments can be subdivided into sections 可以实现这一点 . 我想这就是你问题的答案 .

可加载段在程序 Headers 表中描述 .

长话短说:

在可执行文件中,您有段,可以进一步细分为多个部分 . 段以相反的方式加载到流程中:部分是必需的,因为它们描述了文件中的内容并允许链接 .

至于内存地址和内容:

在现代系统中,只有虚拟地址很重要 . 一个进程被操作系统欺骗,它在内存中单独运行,整个地址空间可用(尽管由于物理内存限制,并非所有地址空间都可以同时使用) . 系统将虚拟地址动态映射到物理地址,对进程透明 .

不使用物理地址,因此它们可以保留为零,但可以设置为相同的地址以防万一 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值