Je dois identifier toutes les sections ELF qui ont l'indicateur LOAD
dans mon script python; en utilisant objdump, je reçoispyelftools: récupère les drapeaux de section comme objdump pour un binaire elf32-littlearm
$ 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)
Cependant, avec le module elftools python3, des sources suivantes:
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))
Je reçois des drapeaux complètement différents:
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)
à partir des sources objdump (Je n'ai pas pu trouver de documentation sur le problème), le drapeau LOAD devrait avoir la valeur 0x02 (0b00000010). Il semble que les drapeaux signalés par pyelftools soient entièrement indépendants de ceux signalés par objdump (vraisemblablement les bons). Qu'est-ce que je fais mal?
_ "Je n'ai pas pu trouver de documentation sur le problème" _ - [voici ce que la spécification ELF a à dire] (http://www.sco.com/developers/gabi/2003-12-17 /ch4.sheader.html) (et FWIW les bits spécifiques à ARM sont [ici] (http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044f/index.html) si vous arrivez à need these) - La définition de 'sh_flags' semble correspondre à vos résultats AFAICS. Notez que objdump gère plusieurs formats d'objets, de sorte que certains de ses 'flags' peuvent être implicites, par exemple. les types de section dans le cas ELF spécifique. – Notlikethat