Java Core: gehackte Core-Datei

Einführung

Die Erklärung hier ist nur eine Frage des Ausprobierens als Voraussetzung. Sie sollten nicht erwarten, dass gültige Informationen aus einer gehackten, unvollständigen Kerndatei stammen. Wenn Sie es ein wenig versuchen und es nicht funktioniert, können Sie Zeit sparen, indem Sie aufgeben und darüber nachdenken, die Kerndatei beim nächsten Mal korrekt abzurufen.

Experiment

Ich habe die in Java Core: HotSpot-Compiler mit SIGSEGV abgestürzt verwendete Kerndatei als Originalmaterial verwendet.

Die ursprüngliche Kerndatei hat eine Größe von ca. 240 MB, aber versuchen Sie, sie wie folgt auf ca. 200 MB zu schneiden.

$ dd if=./core.15045 of=./core.x bs=1024k count=200
200+0 Aufzeichnungseingabe
200+0 Datensatzausgabe
209715200 Bytes(210 MB)Kopiert, 4.11797 Sekunden, 50.9 MB/Sekunden
$ ls -l core.15045 core.x
-rw-r--r--1 root root 240611328 23. April 11:51 core.15045
-rw-r--r--1 imai imai 209715200 25. April 18:37 core.x
$ 
$ objdump -a ./core.x
objdump:Warnung: ./core.x ist abgeschnitten:Erwartete Größe der Kerndatei>=240611328. Gefundene Größe: 209715200。

./core.x:Dateiformat elf64-x86-64
./core.x

Wenn Sie sich diese gehackte Kerndatei mit gdb ansehen, werden die Stapelinformationen usw. nicht korrekt angezeigt.

$ gdb /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/jre-abrt/bin/java ./core.x
...Unterlassung...
Core was generated by `java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomca'.
Program terminated with signal 6, Aborted.
#0  0x00007f50747b01f7 in ?? ()
(gdb) bt
#0  0x00007f50747b01f7 in ?? ()
#1  0x00007f50747b18e8 in ?? ()
#2  0x0000000000000020 in ?? ()
#3  0x0000000000000000 in ?? ()
(gdb) 
(gdb) info shared
Cannot access memory at address 0x7f507538f128
Cannot access memory at address 0x7f507538f120
No shared libraries loaded at this time.
(gdb)

Karte mit Add-Symbol-Datei

Stellen Sie die Informationen darüber, welche Bibliothek welcher Adresse zugeordnet ist, manuell ein, damit Sie sie mit gdb überprüfen können. Verwenden Sie zunächst den Befehl readelf, um eine grobe Kartenadresse aus dem Notizabschnitt der Kerndatei zu finden. Sie können dann bestimmen, welche Adresse zugeordnet werden soll, indem Sie der Adresse die Startadresse des Textabschnitts der gemeinsam genutzten Bibliothek hinzufügen.

$ readelf -n ./core.x
...Unterlassung...
    0x00007f507477a000  0x00007f507477b000  0x0000000000000015
        /usr/lib64/libz.so.1.2.7
    0x00007f507477b000  0x00007f5074933000  0x0000000000000000
        /usr/lib64/libc-2.17.so
    0x00007f5074933000  0x00007f5074b33000  0x00000000000001b8
        /usr/lib64/libc-2.17.so
    0x00007f5074b33000  0x00007f5074b37000  0x00000000000001b8
        /usr/lib64/libc-2.17.so
...
$ readelf -S /usr/lib64/libc-2.17.so  | grep text
  [12] .text             PROGBITS         000000000001f480  0001f480
$

Von den oben genannten wurde es zuerst angezeigt/usr/lib/64/libc-2.18.Bestätigt mit der Startadresse von so und readelf.Fügen Sie die Startposition des Textes hinzu, um die Adresse zu finden.

(gdb) p/x 0x00007f507477b000 + 0x000000000001f480
$1 = 0x7f507479a480
(gdb)

An dieser Adresse libc-2.17.Karte so.

(gdb) add-symbol-file /usr/lib64/libc-2.17.so 0x7f507479a480
add symbol table from file "/usr/lib64/libc-2.17.so" at
        .text_addr = 0x7f507479a480
(y or n) y
Reading symbols from /usr/lib64/libc-2.17.so...(no debugging symbols found)...done.
Missing separate debuginfos, use: debuginfo-install glibc-2.17-196.el7.x86_64
(gdb)

Ich habe die Stapelinformationen gesehen!

Berechnen Sie wie oben die Adresse und ordnen Sie jede gemeinsam genutzte Bibliothek zu. Wenn es sich um Java Core handelt, sind die Hauptbibliotheken libc, libpthread, libjvm. Überprüfen Sie die Stapelinformationen nach dem Zuordnen dieser drei erneut mit gdb.

(gdb) add-symbol-file /usr/lib64/libc-2.17.so 0x7f507479a480
(gdb) add-symbol-file /usr/lib64/libpthread-2.17.so 0x7f5074f55900
(gdb) add-symbol-file /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/jre/lib/amd64/server/libjvm.so   0x7f507390b110
(gdb)

libc, libpthread,Nachdem Sie libjvm zugeordnet haben, überprüfen wir den Stapel mit bt.

(gdb) bt
#0  0x00007f50747b01f7 in raise ()
#1  0x00007f50747b18e8 in abort ()
#2  0x00007f5073f18de9 in os::abort (dump_core=<optimized out>) at /usr/src/debug/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/openjdk/hotspot/src/os/linux/vm/os_linux.cpp:1635
#3  0x00007f50740a7bcf in VMError::report_and_die (this=this@entry=0x7f5070c49bd0)
    at /usr/src/debug/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/openjdk/hotspot/src/share/vm/utilities/vmError.cpp:1074
#4  0x00007f5073f21ff7 in JVM_handle_linux_signal (sig=11, info=0x7f5070c49e30, ucVoid=0x7f5070c49d00, abort_if_unrecognized=<optimized out>)
    at /usr/src/debug/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/openjdk/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp:531
#5  <signal handler called>
#6  0x00007f5073f646c0 in Phase::Phase (this=0x0, pnum=Phase::Compiler)
    at /usr/src/debug/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/openjdk/hotspot/src/share/vm/opto/phase.cpp:83
#7  0x00007f5073b78711 in Compile::Compile (this=0x0, ci_env=0x7f5070c4ba40, compiler=0x7f506c072730, target=0x7f503c0ba4f0, osr_bci=-1, subsume_loads=<optimized out>, 
    do_escape_analysis=true, eliminate_boxing=true) at /usr/src/debug/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/openjdk/hotspot/src/share/vm/opto/compile.cpp:683
#8  0x00007f5073ae3d30 in C2Compiler::compile_method (this=0x7f506c072730, env=0x7f5070c4ba40, target=0x7f503c0ba4f0, entry_bci=-1)
    at /usr/src/debug/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/openjdk/hotspot/src/share/vm/opto/c2compiler.cpp:137
#9  0x00007f5073b7f788 in CompileBroker::invoke_compiler_on_method (task=task@entry=0x7f506c1595c0)
    at /usr/src/debug/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/openjdk/hotspot/src/share/vm/compiler/compileBroker.cpp:1761
#10 0x00007f5073b80b00 in CompileBroker::compiler_thread_loop ()
    at /usr/src/debug/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/openjdk/hotspot/src/share/vm/compiler/compileBroker.cpp:1597
#11 0x00007f5074059cfa in JavaThread::thread_main_inner (this=this@entry=0x7f506c0a8800)
    at /usr/src/debug/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/openjdk/hotspot/src/share/vm/runtime/thread.cpp:1687
#12 0x00007f507405a07f in JavaThread::run (this=0x7f506c0a8800) at /usr/src/debug/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/openjdk/hotspot/src/share/vm/runtime/thread.cpp:1667
#13 0x00007f5073f17de2 in java_start (thread=0x7f506c0a8800) at /usr/src/debug/java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64/openjdk/hotspot/src/os/linux/vm/os_linux.cpp:910
#14 0x00007f5074f57e25 in start_thread ()
#15 0x00007f507487334d in clone ()
(gdb) 

Auf diese Weise kann sogar eine abgeschnittene Kerndatei Informationen bereitstellen.

Recommended Posts

Java Core: gehackte Core-Datei
Erstellung von Java-Dateien
[Java] Dateisystembetrieb
Java-Eigenschaftendatei lesen
[Entwurfsmuster] Java-Kernbibliothek
[Java] Erstellen Sie eine temporäre Datei
[Java] [Android] INI-Datei lesen
Lesen Sie die Java-Eigenschaftendatei in C #
Laden Sie Dateien mit Java HttpURLConnection hoch
Führen Sie eine Batchdatei von Java aus
Entpacken Sie die Zip-Datei in Java
Protokollausgabe in Datei in Java
Java
Beispiel für eine EXCEL-Dateiaktualisierung mit JAVA
Informationen zur Dateikopierverarbeitung in Java
Java
[Java] Verwendung der File-Klasse
Java-Kern: HotSpot-Compiler und C-Heap
Was ist das beste Lesen von Dateien (Java)
Warum nennt Java eine Datei eine Klasse?
Java Core: Sie können den Sicherheitspunkt nicht erreichen und hängen? !!
Java-Kern: HotSpot-Compiler stürzt unter SIGSEGV ab
Lesen Sie die xlsx-Datei in Java mit Selenium
Java (Ausnahmebehandlung, Threading, Sammlung, Datei-E / A)
Java: Platzieren Sie die ResourceBundle-Eigenschaftendatei an einer beliebigen Stelle
Beispiel zum Entpacken einer gz-Datei in Java
[Java8] Durchsuchen Sie das Verzeichnis und holen Sie sich die Datei