vmlinux elff 주어진 구조물의 멤버에 대한 오프셋을 찾습니다.

StackOverflow https://stackoverflow.com/questions/1415745

  •  06-07-2019
  •  | 
  •  

문제

Linux 커널에서 사용되는 구조물의 멤버 변수의 오프셋을 찾아야합니다. 예를 들어, task_struct 유형 인 init_task의 경우 PID와 작업의 오프셋을 원합니다.

나는 이것에 대한 vmlinux 만 있습니다. 오픈 소스 커널 코드를 참조 할 수 있지만 빌드와 다를 수 있습니다.

소스없이 오프셋을 얻을 수 있습니까?

편집 : vmlinux는 ARM 용이며 대상 장치에서 항상 C 코드를 실행할 수는 없습니다.

도움이 되었습니까?

해결책

구조의 크기와 레이아웃은 컴파일 된 객체 파일의 디버깅 정보에 있습니다 (컴파일하는 경우 -g 그리고하지 마십시오 strip).

Pahole (일명 "poke-a-hole", 포장 된 dev-util/dwarves Gentoo)에서)는 구조의 "구멍"에 대한 정보를 출력하기 위해 객체의 난쟁이 디버깅 정보를 읽습니다. 이는 좋은 출발점 일 수 있습니다.

다른 팁

6.47 오프셋

GCC는 C 및 C ++ A를 모두 구현하여 매크로 오프셋을 구현하기위한 구문 연장을 구현합니다.

 primary:
         "__builtin_offsetof" "(" typename "," offsetof_member_designator ")"

 offsetof_member_designator:
           identifier
         | offsetof_member_designator "." identifier
         | offsetof_member_designator "[" expr "]"

이 확장은 충분합니다

 #define offsetof(type, member)  __builtin_offsetof (type, member)

매크로 오프셋의 적절한 정의입니다. C ++에서 유형이 의존적 일 수 있습니다. 두 경우 모두 멤버는 단일 식별자 또는 일련의 멤버 액세스 및 배열 참조로 구성 될 수 있습니다.

ARM-ABI-GDB와 함께 또 다른 솔루션을 찾았습니다-인쇄 및 init_task 및 print & init_task.pid를 수행 할 수 있으며 차이는 오프셋입니다.

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