Tool to parse Vita core files (crash dumps)
Python
Latest commit 8eb9d25 Sep 29, 2016 @xyzz committed on GitHub Merge pull request #8 from 173210/master
Handle pointer to Thumb code
Permalink
Failed to load latest commit information.
.gitignore Initial Aug 11, 2016
README.md
core.py
elf.py
indent.py Initial Aug 11, 2016
main.py
requirements.txt
util.py

README.md

vita-parse-core

Installation

pip install -r requirements.txt

Note that you need the vitasdk toolchain in your path. This tool will use arm-vita-eabi-objdump and arm-vita-eabi-addr2line.

Usage

Get a vita core file from ux0:data (a .psp2dmp file). It's not necessary to gunzip it, the tool will do it itself.

Run:

python2 main.py core_file.psp2dmp homebrew_file.elf

Note that homebrew_file.elf is an .elf file, not .velf, not eboot.bin. It's recommended that you build it with the -g gcc flag enabled to get better debugging information.

Example output

=== THREADS ===
    CRASHBREW
        ID: 0x40010003
        Stop reason: 0x30004 (Data abort exception)
        Status: 0x1 (Running)
        PC: 0x810462ae (crashbrew.elf@1 + 0x2ae)
    SceCommonDialogWorker
        ID: 0x40010073
        Stop reason: 0x0 (No reason)
        Status: 0x8 (Waiting)
        PC: 0xe000af94 (SceLibKernel@1 + 0x6304)

=== THREAD "CRASHBREW" <0x40010003> CRASHED (Data abort exception) ===

DISASSEMBLY AROUND 0x810462ae:

0000829e <main+0xae>:
    } else if (key == SCE_CTRL_CIRCLE) {
        printf("PABT at NULL\n");
        void (*f)() = NULL;
        f();
    } else if (key == SCE_CTRL_SQUARE) {
        printf("DABT at unmapped addr\n");
    829e:   f000 f9c1   bl  8624 <psvDebugScreenPrintf>
        int *c = 0xD0123456;
    82a2:   f243 4356   movw    r3, #13398  ; 0x3456
    82a6:   f2cd 0312   movt    r3, #53266  ; 0xd012
    82aa:   607b        str r3, [r7, #4]
        int x = *c;
    82ac:   687b        ldr r3, [r7, #4]
!!!         681b        ldr r3, [r3, #0] !!!
    82b0:   603b        str r3, [r7, #0]
    82b2:   e005        b.n 82c0 <main+0xd0>
    } else if (key == SCE_CTRL_TRIANGLE) {
    82b4:   697b        ldr r3, [r7, #20]
    82b6:   f5b3 5f80   cmp.w   r3, #4096   ; 0x1000
    82ba:   d101        bne.n   82c0 <main+0xd0>
        overflow_stack();
    82bc:   f7ff ff92   bl  81e4 <overflow_stack>

REGISTERS:
    R0: 0x0
    R1: 0xdeadbeef
    R2: 0xdeadbeef
    R3: 0xd0123456
    R4: 0xdeadbeef
    R5: 0xdeadbeef
    R6: 0xdeadbeef
    R7: 0x81140fd0
    R8: 0xdeadbeef
    R9: 0xdeadbeef
    R10: 0xdeadbeef
    R11: 0xdeadbeef
    R12: 0xdeadbeef
    SP: 0x81140fd0
    LR: 0x810462a3
    PC: 0x810462ae (crashbrew.elf@1 + 0x2ae)

STACK CONTENTS AROUND SP:
          0x81140fc0: 0x8104ffc4 => crashbrew.elf@1 + 0x9fc4 => .LC8 at main.c:?
          0x81140fc4: 0xdeadbeef 
          0x81140fc8: 0xb 
          0x81140fcc: 0x8000 
    SP => 0x81140fd0: 0x810d0000 => crashbrew.elf@2 + 0x0
          0x81140fd4: 0xd0123456 
          0x81140fd8: 0x2 
          0x81140fdc: 0x8104674f => crashbrew.elf@1 + 0x74f => __libc_init_array at ??:?
          0x81140fe0: 0xdeadbeef 
          0x81140fe4: 0x8000 
          0x81140fe8: 0xdeadbeef 
          0x81140fec: 0x81046137 => crashbrew.elf@1 + 0x137 => _start at ??:?
          0x81140ff0: 0x810500a4 => crashbrew.elf@1 + 0xa0a4 => $d at crt0.c:?
          0x81140ff4: 0x0 
          0x81140ff8: 0xffffffff 
          0x81140ffc: 0xe00053cd => SceLibKernel@1 + 0x73d

Support

Please join #vitasdk on freenode and contact xyz if something goes wrong.