이 메모리 문자열은 무엇입니까? 그들은 무엇을 하고 있나요? [복사]

이 메모리 문자열은 무엇입니까? 그들은 무엇을 하고 있나요? [복사]

최근에는 문자열을 사용하여 메모리를 덤프했습니다 sudo cat /dev/mem | strings. 이 덤프를 살펴본 후 매우 흥미로운 사실을 발견했습니다.

.symtab
.strtab
.shstrtab
.note.gnu.build-id
.rela.text
.rela.init.text
.rela.text.unlikely
.rela.exit.text
.rela__ksymtab
.rela__ksymtab_gpl
.rela__kcrctab
.rela__kcrctab_gpl
.rela.rodata
.rodata.str1.8
.rela__mcount_loc
.rodata.str1.1
.rela__bug_table
.rela.smp_locks
.modinfo
__ksymtab_strings
.rela__tracepoints_ptrs
__tracepoints_strings
__versions
.rela.data
.data.unlikely
.rela__verbose
.rela__jump_table
.rela_ftrace_events
.rela.ref.data
.rela__tracepoints
.rela.gnu.linkonce.t6

이 줄은 모두 어떤 방식으로든 관련이 있는 것 같습니다. 메모리에서 모두 (매우) 서로 가깝고, 모두 비슷한 .<name>접두어를 가지며, 모두 서로를 참조하는 것 같습니다.

이러한 문자열이 나타나는 원인은 무엇이며 그 이유는 무엇입니까?

답변1

+1 @jos 위에서 말한 내용("Google it"). 이 특별한 경우에는 ".rela_" 및 "_gpl" 부분을 제거해야 합니다. 이는 커널 기호임을 알 수 있습니다. "rela"는 "relocation"의 약자로 ELF 파일 형식과 관련이 있습니다. 이것들은 모두 흥미로운 주제이므로 더 자세히 조사해 보시기 바랍니다.

답변2

이는 Linux 커널의 섹션 이름과 매우 유사합니다. .rela 접두사가 붙은 재배치 정보에는 지정된 섹션에 대한 재배치 정보가 포함됩니다. 예를 들어, .rela.text는 커널 개체 코드가 저장되는 텍스트 섹션에 대한 재배치 정보입니다.

다른 관심 부분은 다음과 같습니다.

  1. .modinfo – 커널 모듈 정보
  2. .rela.__ksymtab - 커널 기호 테이블 재배치 테이블
  3. .rela.data - 커널 데이터 부분 재배치 테이블
  4. rodata.str1.1 - 읽기 전용 문자열 데이터 부분

등.

/dev/mem에서 문자열을 실행하면 시스템의 물리적 메모리에서만 흥미로운 문자열을 찾을 수 있으므로 압축되지 않은 vmlinuz Linux 커널에서 일부 문자열을 찾을 수 있습니다.

관련 정보