pyelftools:像 objdump 一样检索 elf32-littlearm 二进制文件的部分标志
pyelftools: retrieve section flags like objdump does for an elf32-littlearm binary
我需要在我的 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 报告的标志(可能是正确的)。我做错了什么?
其实他们都同意。正如 Notlikethat 已经指出的那样,ELF 规范将 0x1 (0b00000001) 指向 SHF_WRITE
,因此除 .text
之外的所有部分都标记为可写。
由于 objdump
不是 ELF 特定的(就像 readelf
那样),标志不匹配 1:1,而是当 0x01 是时报告 READONLY
失踪。
我需要在我的 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 报告的标志(可能是正确的)。我做错了什么?
其实他们都同意。正如 Notlikethat 已经指出的那样,ELF 规范将 0x1 (0b00000001) 指向 SHF_WRITE
,因此除 .text
之外的所有部分都标记为可写。
由于 objdump
不是 ELF 特定的(就像 readelf
那样),标志不匹配 1:1,而是当 0x01 是时报告 READONLY
失踪。