【问题标题】:how to save modified ELF by pyelftools如何通过 pyelftools 保存修改后的 ELF
【发布时间】:2013-09-05 07:51:31
【问题描述】:

最近我对 ELF 文件结构很感兴趣。在网上搜索,我发现了一个很棒的脚本,名为 pyelftools。但实际上我不知道如何保存修改后的 ELF; ELFFile 类没有任何方法可做。

首先,我确实喜欢以下内容:

            header = self.elf.header
            self._emitline("%s" % header['e_shnum'])
            header['e_shnum'] = 30
            self._emitline("%s" % header['e_shnum'])

是的,这很糟糕。但遗憾的是,我不知道在 ELF 文件中获得 e_shnum 的偏移量。有没有人可以教教我?

问候,

雷克斯。

【问题讨论】:

    标签: python elf


    【解决方案1】:

    根据作者@eli-bendersky 的说法,pyelftools 是一个用于解析和分析 ELF/DWARF 文件的模块,它没有直接修改它们的方法。我查看了模块源文件,也找不到任何编辑/保存的方法。

    在介绍性帖子中,comments 作者承认 pyelftools 没有 API 级别的支持来执行此操作,但一些修补可以帮助实现您的需求。

    如果 pyelftools 不是硬依赖,这里有一个示例,说明如何使用 elffile 执行相同操作:

    import elffile
    
    eo = elffile.open(name="/bin/ls")
    eo.fileHeader.shnum = 30
    with open('./ls.bin', 'wb') as f: f.write(eo.pack())
    

    使用 readelf,您可以验证更改是否正确保存:

    readelf -h ls.bin 
    ELF Header:
      Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
      Class:                             ELF32
      Data:                              2's complement, little endian
      Version:                           1 (current)
      OS/ABI:                            UNIX - System V
      ABI Version:                       0
      Type:                              EXEC (Executable file)
      Machine:                           Intel 80386
      Version:                           0x1
      Entry point address:               0x804be34
      Start of program headers:          105068 (bytes into file)
      Start of section headers:          103948 (bytes into file)
      Flags:                             0x0
      Size of this header:               52 (bytes)
      Size of program headers:           32 (bytes)
      Number of program headers:         9
      Size of section headers:           40 (bytes)
      Number of section headers:         30
      Section header string table index: 27
    readelf: Error: Unable to read in 0x708 bytes of section headers
    

    关于 elffile 的文档不多,但您可以查看源代码并找出复制 pyelftools 特定功能的方法。如果这不起作用,您可以尝试使用 pyelftools 来读取/分析任务和使用 elffile 来编辑部分和写入更改。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 2010-10-22
      相关资源
      最近更新 更多