【问题标题】:Computing the size of an ELF file based on the header information根据头信息计算ELF文件的大小
【发布时间】:2020-08-21 00:37:27
【问题描述】:

我知道可以基于information found in the header(即e_shoff + (e_shentsize * e_shnum))计算ELF文件的大小(即,它的结束位置),假设有一个节头表(“SHT”) ,而 SHT 是 ELF 的最后一部分。

但是,加载二进制文件不需要 SHT,我想知道如果 SHT 丢失(例如,剥离的二进制文件)是否可以计算相同的信息。我们可以利用程序头或其他偏移量以编程方式计算大小吗?

【问题讨论】:

    标签: linux reverse-engineering executable elf


    【解决方案1】:

    我们可以利用程序头或其他偏移量吗?

    二进制文件开始运行所需的信息包含在程序头中(使用readelf -Wl a.out 来查看其中的内容)。

    您可以通过找到phdr->p_offset + phdr->p_filesz 的最大值来计算二进制所需的最小值。如果您以该大小截断文件,它应该可以继续工作(或至少加载并到达main)。

    但该文件可能包含任意数量的附加不可加载部分,因此如果您计算的大小小于磁盘上的文件大小,请不要感到惊讶。

    是否需要这些额外的部分完全取决于可执行文件——它可能包含opens argv[0]seeks 到某个偏移量的代码,以及来自那里的reads 数据(其中以防应用程序在截断后停止工作)。

    附言

    假设 ...SHT 是 ELF 的最后一部分。

    该假设不一定正确,当然也不需要文件是正确的ELF 文件。

    【讨论】:

    • 感谢您的回复!我稍微澄清了我的问题。我的目标是以编程方式而不是通过 readelf 来完成。您建议以任何方式遍历程序标头以跟踪 p_offset + phdr->p_filesz
    • @AshkanHosseini 答案是完全一样的——你可以以编程方式读取程序头(实际上很容易),完全readelf 一样。偏移量和计数在 ELF 文件头中找到。
    • 有道理,谢谢。是的,我将只使用e_phnum 然后索引信息。那不可能得到确切的尺寸吗?仅估算?
    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2022-08-16
    相关资源
    最近更新 更多