2016-11-11 3 views
0

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?

+0

_ "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

Répondre

1

En fait, ils sont tous les deux d'accord. Comme Notlikethat déjà souligné, les points de spécification ELF 0x1 (0b00000001) pour être SHF_WRITE, donc toutes les sections, mais .text sont marqués en écriture.

Puisque objdump n'est pas spécifique ELF (comme readelf serait), les indicateurs ne correspondent pas 1: 1, et à la place il signale READONLY quand 0x01 est manquant.