pyelftools:检索部分标志,如objdump,用于elf32-littlearm二进制文件

时间:2016-11-11 13:29:08

标签: python arm elf objdump

我需要识别我的python脚本中具有LOAD标志的所有ELF部分;使用objdump,我收到了

$ arm-none-eabi-objdump -h test.elf

test.elf:     file format elf32-littlearm

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00014480  00000000  00000000  00008000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .relocate     00000090  20000000  00014480  00020000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          000016ec  20000090  00014510  00020090  2**4
                  ALLOC
  3 .stack        00002004  2000177c  00014510  0002177c  2**0
                  ALLOC
  4 TOUCH_SAFETY_DATA_LOCATION 00000704  20004000  00014510  00024000  2**3
                  CONTENTS, ALLOC, LOAD, DATA
  5 FMEA_SAFETY_DATA_LOCATION 00000070  20007c00  00014c14  00027c00  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  ... (some 10 or so more sections)

但是,使用Python3 elftools模块,来自以下来源:

from elftools.elf.elffile import ELFFile

for section in ELFFile(open("test.elf", "rb")).iter_sections():
    print("{0:30s} 0b{1:08b}".format(section.name, section.header.sh_flags))

我收到完全不同的旗帜:

                               0b00000000
.text                          0b00000110
.relocate                      0b00000011
.bss                           0b00000011
.stack                         0b00000011
TOUCH_SAFETY_DATA_LOCATION     0b00000011
FMEA_SAFETY_DATA_LOCATION      0b00000011
... (some 10 or so more sections)

从objdump源代码(我无法找到有关该问题的任何文档),LOAD标志的值应为0x02(0b00000010)。似乎pyelftools报告的标志完全独立于objdump报告的标志(可能是正确的标志)。我做错了什么?

1 个答案:

答案 0 :(得分:1)

实际上他们都同意。正如Notlikethat已经指出的那样,ELF规范将0x1(0b00000001)指向SHF_WRITE,因此除.text之外的所有部分都标记为可写。

由于objdump不是特定于ELF的(例如readelf),因此标记不会与1:1匹配,而是在缺少0x01时报告READONLY