0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文了解Prelink的注意事项

如意 来源:CSDN 作者:CaspianSea 2020-06-22 08:31 次阅读

1.1. 地址无关代码

需要被 Prelink 的 ELF 文件,无论是共享库还是可执行文件,编译时必须加 -fpic/-fPIC 参数,生成目标无关地址代码。对于可执行文件,不能使用 -fpie/-fPIE 加 –pie 生成地址无关可执行文件,否则无法被 prelink。

一文了解Prelink的注意事项

这个结论是根据上述测试程序得出的,其中的详细机理有待进一步研究。

1.2. 检查Prelink 状态

可以使用 readelf 和 objdump 工具来检查一个 ELF 文件是否已经被 prelink。例如:

注意观察到 6~14 行,对比没有被 prelink 之前的状态,INIT、FINI、STRTAB、SYMTAB 等 section 的地址已经修改为运行时进程空间的虚拟内存地址。第 30 行,RELACOUNT 表示已经预先进行重定位的符号的数量;第 31 行是 prelink 根据 ELF 所直接依赖的共享库计算的 MD5 值,该值用于判断该 ELF 所以来的共享库是否被修改过;从第 32 行可以看出该 ELF 已被加上 PRELINKED 标记和时间戳。

但是,并非所有被成功 prelink 的 ELF 文件都会加上 PRELINKED 的标记和时间戳。在用 prelink 处理完我们的SDK的后,发现 target_bin 所有的依赖项都有 PRELINKED 标记,target_bin 自身并没有此标记。但是通过测试其启动速度,确有巨大的提升,证明 prelink 在 target_bin 上确实发挥了作用。

至于为什么没有这个标记,暂时还没有调查清楚,仍待进一步研究。

对于上述情况,通过 objdump 等工具查看ELF文件的 section header,我们仍然可以发现 prelink 处理后留下的蛛丝马迹。

Prelink 之前,查看 target_bin 的节头:

Prelink 之后,再次查看节头:

对比 prelink 前后的节头信息,我们发现 prelink 后每个节的地址都有了调整,增加了.gnu.liblist , .gnu.conflict 和 .gnu.prelink_undo 这三个节。同时 .dynstr 节的 size 由 0xa3cb1 增加到了 0xa3e8c。这些都是 prelink 之后 ELF 的 size 有所增大的原因。

1.3. 查看ELF依赖树

Prelink 的处理过程是从目标 ELF 文件开始,检查其依赖树。从叶子节点开始处理,自底向上,直至根节点。若中间任何节点处理异常,则目标文件都无法被 prelink。同理,如果已经被 prelink 处理的 ELF 文件,如果其依赖树的中任何节点对应的 ELF 文件有更改,则需要从根开始重新 prelink。如果被更改的 ELF 所处的层级较低,被很多可执行文件依赖,则可能整个系统的 ELF 都需要重新进行 Prelink 处理。

可以使用 lddtree 查看 ELF 文件的依赖树。但是这个工具比较鸡肋,只适用于处理本机的 ELF 文件,无法像 prelink 一样可以在运行时指定 sysroot 和 LD_LIBRARY_PATH。

1.4. 不必要的依赖项

如果 prelink 在处理某个 ELF 文件(记为 A)的过程中,发现 A 并没有使用其直接依赖的另一个 ELF 文件(记为 B),而 A 又通过 C 间接依赖到 B,并且 B 已经被 prelink 处理。此时,A 将无法被 prelink。

1.5. 动态加载的共享库

Prelink 对于通过 dlopen 方式打开的共享库没有效果。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编译
    +关注

    关注

    0

    文章

    659

    浏览量

    32914
  • Prelink
    +关注

    关注

    0

    文章

    2

    浏览量

    1627
收藏 人收藏

    评论

    相关推荐

    多层板埋孔设计注意事项

    多层板埋孔设计注意事项
    的头像 发表于 12-20 16:06 192次阅读

    PCBA生产注意事项

       PCBA生产注意事项。 长按识别二维码关注[现代电子装联工艺技术]订阅号,开启我们共同的学习之旅 end
    的头像 发表于 11-15 17:04 427次阅读
    PCBA生产<b class='flag-5'>注意事项</b>

    如何为住宅配置静态IP:步骤与注意事项

    为住宅配置静态IP地址,通常涉及以下步骤和注意事项
    的头像 发表于 10-24 08:02 268次阅读

    脉冲式充电器的使用注意事项

    脉冲式充电器的使用注意事项主要包括以下几个方面: 、安全注意事项 用电安全 :在充电过程中,应始终保持警惕,注意用电安全,避免触电和短路等危险情况的发生。 防火防灾 :避免在易燃易爆
    的头像 发表于 09-26 16:05 911次阅读

    绕线电感定制的注意事项

    电子发烧友网站提供《绕线电感定制的注意事项.docx》资料免费下载
    发表于 09-20 11:24 0次下载

    profinet网关的接线步骤和注意事项

    Profinet网关的接线过程可以根据具体的应用场景和设备型号有所不同,但般可以按照以下步骤进行,以下是个典型的接线步骤和注意事项
    的头像 发表于 09-18 11:53 691次阅读

    共模电感定制的注意事项

    电子发烧友网站提供《共模电感定制的注意事项.docx》资料免费下载
    发表于 09-04 11:47 0次下载

    LiFePO4设计注意事项

    电子发烧友网站提供《LiFePO4设计注意事项.pdf》资料免费下载
    发表于 09-03 09:24 0次下载
    LiFePO4设计<b class='flag-5'>注意事项</b>

    现场总线的使用方法与注意事项

    的稳定可靠运行,正确的使用方法和注意事项至关重要。本文将详细介绍现场总线的使用方法和注意事项,以供读者参考。
    的头像 发表于 06-06 11:49 830次阅读

    钳形电流表的使用方法和注意事项

    钳形电流表,作为电气测量和测试的重要工具,其使用方法和注意事项对于保障测量结果的准确性和操作人员的安全至关重要。本文将从钳形电流表的使用方法和注意事项两个方面进行详细阐述,以期为读者提供个全面而深入的
    的头像 发表于 05-14 16:14 3532次阅读

    FMD LINK 使用注意事项

    电子发烧友网站提供《FMD LINK 使用注意事项.pdf》资料免费下载
    发表于 05-06 10:11 0次下载

    EMI / Safety观念简介及注意事项

    电子发烧友网站提供《EMI / Safety观念简介及注意事项.ppt》资料免费下载
    发表于 02-28 09:45 1次下载

    Aigtek高压放大器使用注意事项及要求有哪些

    高压放大器是种强大且潜在有危险性的电子设备。为了确保使用安全和性能稳定,使用者需要了解高压放大器的注意事项和要求。本文将详细介绍高压放大器的使用注意事项和要求,以提供参考和指导。
    的头像 发表于 01-19 10:52 420次阅读
    Aigtek高压放大器使用<b class='flag-5'>注意事项</b>及要求有哪些

    浪涌抑制器的应用及注意事项

    浪涌抑制器的应用及注意事项?|深圳比创达电子
    的头像 发表于 01-19 09:55 767次阅读
    浪涌抑制器的应用及<b class='flag-5'>注意事项</b>?

    STM32ADC中断的使用注意事项和优化建议

    STM32ADC中断的使用注意事项和优化建议 STM32ADC(模拟数字转换器)是STMicroelectronics开发的款用于外部模拟信号转换为数字信号的器件。在使用STM32ADC时,合理地
    的头像 发表于 01-12 15:17 3543次阅读