2014-02-12 7 views
3

파일의 의미는 무엇입니까? 2**22**02 ** 2 및 2 ** 0의 "Algn"은 objdump의 출력에서 ​​무엇을 의미합니까?

$ objdump -h main.o 

main.o:  file format elf32-i386 

Sections: 
Idx Name   Size  VMA  LMA  File off Algn 
    0 .text   0000000b 00000000 00000000 00000034 2**2 
        CONTENTS, ALLOC, LOAD, READONLY, CODE 
    1 .data   00000000 00000000 00000000 00000040 2**2 
        CONTENTS, ALLOC, LOAD, DATA 
    2 .bss   00000000 00000000 00000000 00000040 2**2 
        ALLOC 
    3 .note.GNU-stack 00000000 00000000 00000000 00000040 2**0 
        CONTENTS, READONLY, CODE 
+0

좀 더 일반적인 "모든 헤더 질문 설명": http://stackoverflow.com/questions/15862288/readelf-meaning-of-column-headers –

답변

7

2**0 더 (한 바이트) 배향을 의미 동시에 I가 2**2 2 2 또는 4 바이트 정렬을 의미한다고 가정한다.

이 값은 ELF 섹션 헤더의 sh_addralign 필드에서 가져옵니다. ELF specification 상태 (강조 표시) :

sh_addralign 일부 섹션에는 주소 정렬 제약 조건이 있습니다. 예를 들어, 섹션에 더블 워드가 있으면 시스템은 전체 섹션에 대해 더블 워드 정렬을 보장해야합니다. 즉, sh_addr의 값은 sh_addralign의 값을 모듈로 0으로 합쳐 야합니다. 현재 만 0과 양의 정수 2를 사용할 수 있습니다. 값 0과 1은 섹션에 정렬 제약 조건이 없음을 의미합니다. 정렬이 2의 제곱해야하기 때문에 Ray Toal mentioned으로

은, 그것은 단지 objdump2**x 표기와 2의 거듭 제곱이 값을 표현하는 것이 의미가 있습니다.

일부 언어에서는 PythonFORTRAN과 같이 **은 지수 또는 지수 연산자입니다. objdump.c 보면


, 우리는 다음을 참조하십시오

static void 
dump_section_header (bfd *abfd, asection *section, 
      void *ignored ATTRIBUTE_UNUSED) 
{ 
    // ... 
    printf (" %08lx 2**%u", (unsigned long) section->filepos, 
     bfd_get_section_alignment (abfd, section)); 

그리고 objdump.h에 :

#define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0) 

bfdalignment_power 회원입니다 :

/* The alignment requirement of the section, as an exponent of 2 - 
    e.g., 3 aligns to 2^3 (or 8). */ 

unsigned int alignment_power; 

+3

[ELF 형식 설명서 참조] http : //www.tortall.net/projects/yasm/manual/html/objfmt-elf-section.html). 당신은 물론 정확합니다. –

+0

@RayToal 해당 링크에는 '2 ** 2'가 4임을 의미하는 내용은 없습니다. –

+1

그래, 사실 그 링크는 사실이지만 "심각하게 두 가지의 힘이어야합니다" objdump' 저자는 '2 **'n 형식으로 정렬을 작성합니다. –