【问题标题】:How to extend a ELF binary如何扩展 ELF 二进制文件
【发布时间】:2013-03-20 03:02:05
【问题描述】:

我正在编写一个小型仪器工具。我必须在二进制文件中插入检测例程。一个好的方法应该是将这些例程插入到单独的代码段和单独的数据段中,您能解释一下如何实现这一点吗?另外如何修改原文件中代码段的大小?

最好的,

【问题讨论】:

  • 为什么不在运行时使用插入来执行此操作? LD_PRELOAD 在 Linux 上,DYLD_INSERT_LIBRARIES 在 OS X 上等等都可以正常工作。

标签: compiler-construction linker binary elf


【解决方案1】:

我必须在二进制文件中插入检测例程。一个好的方法应该是将这些例程插入单独的代码段和单独的数据段中

什么是binary file?为可重定位 (ET_REL) 对象文件执行此操作与为完全链接的可执行文件 (ET_EXEC) 或共享库 (ET_DYN) 执行此操作之间存在很大的区别。

您能解释一下如何做到这一点吗?

对于ET_REL,它应该是相当简单的:您读取指向节头的文件头,它告诉您.data.text 节的位置。然后,您编写一个新文件,扩展您想要的部分,复制其他所有内容,并调整部分标题以反映新的部分偏移量和大小。

对于ET_DYNET_EXEC,问题很可能太难了:您需要调整重定位表、哈希表、程序头;保持所有结构自洽并正确对齐。

【讨论】:

    【解决方案2】:

    在 Shaun Clowes 的 Black Hat 演讲中,Shaun 采用了两种策略来修改 ELF 可执行文件:

    • 在文件补丁中 - 通过扩展段来实现

    • 在核心补丁中(动态) - 通过利用内存空间来实现 由于段对齐而可用。

    它被称为“Black Hat USA 2002 - Fixing/Making Holes in Binaries”(Youtube)

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 2015-11-07
      • 2017-04-08
      • 2017-10-11
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      相关资源
      最近更新 更多