首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用pyelftools保存修改后的ELF

如何用pyelftools保存修改后的ELF
EN

Stack Overflow用户
提问于 2013-09-02 08:58:47
回答 1查看 5.5K关注 0票数 5

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

首先,我喜欢以下几点:

代码语言:javascript
复制
            header = self.elf.header
            self._emitline("%s" % header['e_shnum'])
            header['e_shnum'] = 30
            self._emitline("%s" % header['e_shnum'])

是啊,真是糟糕透顶。但遗憾的是,我不知道在ELF文件中得到e_shnum的偏移量。有人能教我吗?

致以敬意,

雷克斯。

EN

回答 1

Stack Overflow用户

发布于 2013-10-01 08:36:10

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

在介绍性文章中,在评论中,作者承认pyelftools没有API级别的支持来实现这一点,但是一些修改可以帮助实现您所需要的。

如果pyelftools不是硬依赖项,下面是一个如何使用埃菲尔进行相同操作的示例

代码语言:javascript
复制
import elffile

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

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

代码语言:javascript
复制
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来编辑部分和编写更改。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18569232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档