2013-08-06 2 views
2

실행중인 프로그램의 섹션 (특히 Linux 커널 2.6.34.8)에서 .eh_frame 섹션의 내용에 액세스하려고합니다. .eh_frame에는 예외 처리에 사용되는 유용한 데이터가 들어 있으며 커널 코드에서 내부적으로 사용하고 싶습니다. 이 섹션은 이미 gcc (readelf -a vmlinux.o.eh_frame이 포함되어 있음)으로 작성 중이므로 문제는 코드에서 읽는 것입니다. 엘프 형식의 워드 프로세서가 코드 실행 중에 .eh_frame에 액세스 할 수 있다고 확신합니다.실행 중 .eh_frame 데이터 액세스

은 내가 .eh_frame 데이터를로드 실제 코드를 .eh_frame 사용의 검색에 glibc의 소스로 보면서 sysdeps/generic/sysdep.h에서 가장 CFA 지침 매크로를 찾았지만 적이 없다.

파일에서 데이터를로드하기 위해 커널을로드하는 프로세스를 수정해야하거나 매크로/어셈블러 이름으로 어딘가에 저장되는 .eh_frame info/.eh_frame_hdr 섹션 포인터 (C 변수로 추출 될 수 있도록))?

답변

1

vmlinux.o은로드되는 실제 커널이 아닙니다.

실제 커널 이미지 (일반적으로 bzImage)는 ELF 파일이 아니며 커널 실행에 필요한 데이터 만 포함합니다.

또한 대부분의 커널은 예외 처리 정보로 컴파일되지 않습니다.

+0

감사합니다. 그러나 예외 처리 정보로 컴파일 된 커널이 런타임에 액세스 할 수 있습니까 ('.eh_frame' 데이터)? 그렇다면 어떻게? –

+0

내가 말했듯이, 그 정보는'vmlinux.o'에있을 수 있지만 실제 커널 이미지에는 없습니다. –

+0

그래서 필요한 효과를 얻으려면 일반 커널 빌드 프로세스에 주입해야하고, 나중에 생성 된 코드에서 정의 된 심볼과 함께 모든 .eh_frame 데이터를 수집해야합니다. 커널 이미지에 주입된다. 그러면 심볼은 런타임 중에 수집 된 데이터에 액세스하는 데 사용됩니다. –