ELF 실행 파일의 구조 내의 요소의 주소
문제
는 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 유형을 알고있는 경우 레이아웃을 다시 만들 수 있습니다.
제휴하지 않습니다 StackOverflow