Kürzlich habe ich meine Speicherstrings (einfach weil ich es konnte) mit gesichert sudo cat /dev/mem | strings
. Beim Überprüfen dieses Dumps fielen mir einige sehr interessante Dinge auf:
.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
Diese Zeilen scheinen alle irgendwie miteinander verbunden zu sein: Sie liegen im Gedächtnis alle (sehr) nahe beieinander, sie haben alle ähnliche .<name>
Präfixe und sie scheinen alle aufeinander zu verweisen.
Was könnte die Anzeige dieser Zeichenfolgen verursachen und warum?
Antwort1
+1 für das, was @jos oben gesagt hat („google es“). In diesem speziellen Fall sollten Sie die Teile „.rela_“ und „_gpl“ entfernen. Sie werden feststellen, dass dies Kernelsymbole sind. „rela“ ist ein Akronym für „Relocation“ und hat mit dem ELF-Dateiformat zu tun. Dies sind alles interessante Themen und ich ermutige Sie, sich näher damit zu befassen.
Antwort2
Diese ähneln stark den Abschnittsnamen des Linux-Kernels. Die mit dem Präfix .rela versehenen Abschnitte enthalten Verschiebungsinformationen für den benannten Abschnitt, z. B. ist .rela.text die Verschiebungsinformation für den Textabschnitt (in dem der Objektcode des Kernels gespeichert ist).
Weitere interessante Abschnitte sind:
- .modinfo - Informationen zum Kernelmodul
- .rela.__ksymtab - Umlagerungstabelle für Kernelsymboltabellen
- .rela.data - Verschiebungstabelle für Kernel-Datenabschnitte
- rodata.str1.1 - Nur-Lese-Datenabschnitt für Zeichenfolgen
und so weiter.
Das Ausführen von Strings auf /dev/mem findet nur interessante Strings im physischen Speicher des Systems. Daher ist es Ihnen gelungen, einige Strings zu finden, die sich im unkomprimierten vmlinuz-Linux-Kernel befinden.