문제

는 Debug에 대해 컴파일되지 않은 ELF 실행 파일로부터 구조 내의 요소의 주소를 얻을 수 있습니까?

예제에서 다음 코드가 주어졌습니다.

typedef struct {
   int tokyo;
   int paris;
   int london;
}cities;

cities  places;
.

nm 및 readelf는 변수의 시작소의 시작 주소를 제공하며, readell은 또한 sizeof를 제공합니다 :

    Num:    Value  Size Type    Bind   Vis      Ndx Name
1994983: d0003ae8    12 OBJECT  GLOBAL DEFAULT   23 cities
.

그러나 필요한 것은 구조 내의 각 요소의 주소입니다.그래서 내가 원하는 것보다 :

d0003ae8    cities.tokyo
d0003aec    cities.paris
d0003af0    cities.london
.

내 유일한 경로는 DWARF2 디버그 정보로 컴파일하고, readelf (-wliao)를 사용하여 .debug_info 섹션을 덤프 한 다음 dw_tag_variable 추가 base_type 크기를 추가로 해석합니다.예제 readelf :

 <1><e00b>: Abbrev Number: 5 (DW_TAG_structure_type)
     DW_AT_byte_size   : 12
     DW_AT_decl_file   : 3  
     DW_AT_decl_line   : 25 
 <2><e013>: Abbrev Number: 6 (DW_TAG_member)
     DW_AT_name        : tokyo
     DW_AT_decl_file   : 3  
     DW_AT_decl_line   : 15 
     DW_AT_type        : <df04>
 <2><e02e>: Abbrev Number: 6 (DW_TAG_member)
     DW_AT_name        : paris
     DW_AT_decl_file   : 3  
     DW_AT_decl_line   : 16 
     DW_AT_type        : <df04> 
 <2><e02e>: Abbrev Number: 6 (DW_TAG_member)
     DW_AT_name        : london
     DW_AT_decl_file   : 3  
     DW_AT_decl_line   : 16 
     DW_AT_type        : <df04> 
.

소스 코드에 액세스하지 않고이 작업을 수행하는 방법을 찾아야하며 디버그 정보가 꺼져 있습니다 ..

도움이나 포인터가 인정 받았습니다.

고마워, 크리스

도움이 되었습니까?

해결책

아니요,이 작업을 수행 할 방법이 없습니다.ELF만으로는 유형이나 오프셋을 설명하지 않습니다.

구조의 필드와 객체가 빌드되는 아키텍처의 ABI 유형을 알고있는 경우 레이아웃을 다시 만들 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top