2016-11-11 2 views
0

PythonスクリプトにLOADフラグを持つすべてのELFセクションを特定する必要があります。 objdumpの使用、私は次のソースからのpython3のelftoolsモジュールと、しかしpyelftools:elf32-littlearmバイナリの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) 

を受け取る:objdumpのソースから

       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) 

(:

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)) 

私は完全に異なるフラグを受け取りますこの問題に関するドキュメントを見つけることができませんでした)、LOADフラグの値は0x02(0b00000010)でなければなりません。 pyelftoolsによって報告されるフラグは、objdump(おそらく正しいもの)によって報告されるフラグから完全に独立しているようです。私は間違って何をしていますか?

+0

_ "この問題に関するドキュメントを見つけることができませんでした" _ [ELFの仕様は次のとおりです](http://www.sco.com/developers/gabi/2003-12-17 /ch4.sheader.html)(FWIWの場合、ARM固有のビットは[ここ](http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044f/index.html)になります。それらを必要とする) - sh_flags定義はAFAICSの結果と一致するように見えます。 objdumpは複数のオブジェクトフォーマットを扱うので、その 'フラグ'のいくつかは暗黙的に、例えば、セクションは特定のELFの場合に入力します。 – Notlikethat

答えて

1

実際にはどちらも同意します。 Notlikethatが既に指摘したように、ELF specは0x37(0b00000001)をSHF_WRITEと指しているので、.text以外のすべてのセクションは書き込み可能とマークされています。

objdumpはELF固有ではないため(readelfなど)、フラグは1:1と一致せず、0x01がない場合はREADONLYと報告されます。

関連する問題