2014-07-14 7 views
0

이전에는 많은 혼란이있었습니다. static, dynamic(.so)뿐만 아니라 시간에 내가 알고 해달라고하면 kallsyms (module symbols)을 포함하고 다른 실행 -vmlinux 바이너리의 모든 기호 정보를 인쇄하십시오.

나는 power-pc 아키텍처 vmlinux 진에서 모든 상징적 정보를 인쇄 할.

내가 GDB, readelf, /proc/kallsyms 또는 system.map를 사용하거나 core file을 받고에서 (actually I can not and its difficult to explain here why)를 관심하고 있지 않다.

GDB, readelf, objdump, kallsyms or systme.map이 어떻게 생성되는지 더 많이 알고 있습니다. 그들이 사용하는 커널 데이터 구조는 무엇입니까? 그들이 사용하는 것을 선호하는 라이브러리 -

libelf 또는 libdwarf는 지금까지 나의 이해는 말한다 : 모든 정적 정보

  1. 사용 libelf/libdwarf.
  2. rld_map 섹션은 동적 .so 파일에 대해 구문 분석되어야합니다.
  3. kallsyms의 경우 동적으로 추가되는 LKM에 대한 기호 정보를 처리하는 방법을 모르겠습니다.

위의 상황을 고려하여 처음부터 도구를 작성하는 것이 현명한 결정인지 알려주세요. 이제는 libdwarf를 사용하여 모든 함수 이름과 그 주소 목록을 얻을 수있었습니다.

위의 상황에서 사용하는 것이 가장 좋거나 처음부터 무언가를 쓰지 않고 위의 시나리오에서 다소 수정 될 수있는 소스 코드를 누군가가 나를 안내 할 수 있습니까? 아니면 실제로 가능하지 않습니다. (readelf/objdump/GDB의 스 니펫 일 수도 있습니다.)

필요하다면 명확히하고 업데이트하십시오.

감사합니다.

+0

엘프 사양과 링커 및 로더의 작동 방식을 살펴 보시기 바랍니다. 재미 나 배우기를 원하지 않는 한 처음부터 쓰는 것은 매우 나쁜 생각입니다. – Sasi

답변

0

커널을 직접 만든 경우 기본적으로 System.map 파일을 만들어야합니다.

vmlinux:ffffffff81c8d960 d aa_fs_entry_features vmlinux:ffffffff81c8dbc0 d aa_fs_entry_file vmlinux:ffffffff81c8da80 d aa_fs_entry_policy vmlinux:ffffffff81c8e300 D aa_fs_entry_rlimit vmlinux:ffffffff813179a0 T __aa_fs_namespace_mkdir

가 thrid 열의 출력이 제공 : 또한 커널 소스 코드에서 당신이

대안 system.map의 scritp을 만드는 데 사용할 수있는 스크립트 /usr/src/linux/scripts/mksysmap를 확인할 수 있으며, nm -A vmlinux 명령을 사용하여 프로그램이 메모리에로드 될 때 기호가있는 세부 정보. "B"또는 "b"심볼이 초기화되지 않은 데이터 섹션 (BSS라고 함)에 있습니다. "T"또는 "t"기호는 텍스트 (코드) 섹션에 있습니다. "U"기호가 정의되지 않았습니다.

+0

정보 주셔서 감사합니다 ... 내 편집을 참조하십시오. –

+0

전반적으로 달성하고자하는 목표에 대해 자세히 설명 할 수 있으면 가장 좋습니다.질문이 컴파일과 링크와 관련이 있다면 gcc와 관련하여 가능합니다. 그러나 커널이 손상된 경우 kdump를 구성하고 분석을 위해 vmcore 파일을 얻는 방법을 고려해 보았습니다. – askb

+0

여기에 전체 시나리오를 말하기가 어렵다고 믿어 의심치 않습니다. 핵심 파일을 얻을 방법이 없다고 말하지만, 메모리 주소를 제공하면 원시 파일을 얻을 수있는 메커니즘이 있다고 가정합니다. 이후에 파싱 될 수있는 해당 위치의 데이터 앞서 말했듯이 GDB, readelf 또는/proc/kallsyms 또는 system.map에서 정보를 얻는 방법을 알고 싶습니다. 그들이 사용하는 데이터 구조 나 기호 정보를 얻기 위해 사용하는 라이브러리는 무엇입니까? –