최근에 나는 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
@jos가 위에서 말한 내용("google it")에 +1하세요. 이 특별한 경우에는 ".rela_" 및 "_gpl" 부분을 제거해야 합니다. 이것이 커널 기호임을 알 수 있습니다. "rela"는 "relocation"의 약어이며 ELF 파일 형식과 관련이 있습니다. 이것들은 모두 흥미로운 주제이므로 더 자세히 살펴보시기 바랍니다.
답변2
이는 Linux 커널의 섹션 이름과 매우 유사합니다. .rela 접두사가 붙은 것들은 명명된 섹션에 대한 재배치 정보를 포함합니다. 예를 들어 .rela.text는 텍스트 섹션(커널 개체 코드가 저장되는 곳)에 대한 재배치 정보입니다.
다른 관심 섹션은 다음과 같습니다.
- .modinfo - 커널 모듈 정보
- .rela.__ksymtab - 커널 기호 테이블 재배치 테이블
- .rela.data - 커널 데이터 섹션 재배치 테이블
- rodata.str1.1 - 문자열에 대한 읽기 전용 데이터 섹션
등등.
/dev/mem에서 문자열을 실행하면 시스템의 물리적 메모리에서 흥미로운 문자열을 찾을 수 있습니다. 따라서 압축되지 않은 vmlinuz Linux 커널에 있는 일부 문자열을 찾을 수 있었습니다.