oatdump

 

mutian@mutian:~/code/test$ cat HelloWorld.java 
public class HelloWorld {

    static public void main(String[] args) {
        System.out.println("Hello world!");
    }
}
mutian@mutian:~/code/test$ javac HelloWorld.java 
mutian@mutian:~/code/test$ ls
HelloWorld.class  HelloWorld.java
mutian@mutian:~/code/test$ dx --dex --output=HelloWorld.jar HelloWorld.class 
mutian@mutian:~/code/test$ ls
HelloWorld.class  HelloWorld.jar  HelloWorld.java  oatdump
mutian@mutian:~/code/test$ adb push HelloWorld.jar /data/user/
16 KB/s (752 bytes in 0.044s)
mutian@mutian:~/code/test$ adb shell
root@htc_a50cml_dtul:/ # cd /data/user/
root@htc_a50cml_dtul:/data/user # dalvikvm64 -cp HelloWorld.jar HelloWorld
Hello world!

 

mutian@mutian:~/code/E56MLDTUL_Stable/out/host/linux-x86/bin$ adb pull /data/dalvik-cache/arm64/data@user@HelloWorld.jar@classes.dex
161 KB/s (12968 bytes in 0.078s)
mutian@mutian:~/code/E56MLDTUL_Stable/out/host/linux-x86/bin$ ./oatdump  --oat-file=data@user@HelloWorld.jar@classes.dex 
MAGIC:
oat
064

CHECKSUM:
0xec3a08ad

INSTRUCTION SET:
Arm64

INSTRUCTION SET FEATURES:
smp,a53

DEX FILE COUNT:
1

EXECUTABLE OFFSET:
0x00001000

INTERPRETER TO INTERPRETER BRIDGE OFFSET:
0x00000000

INTERPRETER TO COMPILED CODE BRIDGE OFFSET:
0x00000000

JNI DLSYM LOOKUP OFFSET:
0x00000000

QUICK GENERIC JNI TRAMPOLINE OFFSET:
0x00000000

QUICK IMT CONFLICT TRAMPOLINE OFFSET:
0x00000000

QUICK RESOLUTION TRAMPOLINE OFFSET:
0x00000000

QUICK TO INTERPRETER BRIDGE OFFSET:
0x00000000

IMAGE PATCH DELTA:
0 (0x00000000)

IMAGE FILE LOCATION OAT CHECKSUM:
0x78f19603

IMAGE FILE LOCATION OAT BEGIN:
0x70e83000

KEY VALUE STORE:
classpath = 
debuggable = false
dex2oat-cmdline = --runtime-arg -classpath --runtime-arg HelloWorld.jar --instruction-set=arm64 --instruction-set-features=smp,a53 --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --dex-file=/data/user/HelloWorld.jar --oat-file=/data/dalvik-cache/arm64/data@user@HelloWorld.jar@classes.dex -j4
dex2oat-host = Arm
image-location = /data/dalvik-cache/arm64/system@framework@boot.art
pic = true

SIZE:
4356

OatDexFile:
location: /data/user/HelloWorld.jar
checksum: 0xcf2c0204
0: LHelloWorld; (offset=0x00000508) (type_idx=0) (StatusInitialized) (OatClassAllCompiled)
  0: void HelloWorld.<init>() (dex_method_idx=0)
    DEX CODE:
      0x0000: 7010 0300 0000               | invoke-direct {v0}, void java.lang.Object.<init>() // method@3
      0x0003: 0e00                         | return-void
    OatMethodOffsets (offset=0x0000050c)
      code_offset: 0x0000101c 
      gc_map: (offset=0x00000000)
    OatQuickMethodHeader (offset=0x00001000)
      mapping_table: (offset=0x00000000)
      vmap_table: (offset=0x00000514)
        Optimized CodeInfo (size=18, number_of_dex_registers=1, number_of_stack_maps=0, has_inline_info=0, number_of_bytes_for_inline_info=0, number_of_bytes_for_dex_register_map=1, number_of_bytes_for_dex_pc=0, number_of_bytes_for_native_pc=0, number_of_bytes_for_register_mask=0)
        DexRegisterLocationCatalog (number_of_entries=0, size_in_bytes=0)
    QuickMethodFrameInfo
      frame_size_in_bytes: 0
      core_spill_mask: 0x40000000 (r30)
      fp_spill_mask: 0x00000000 
      vr_stack_locations:
          ins: v0[sp + #8]
          method*: v1[sp + #0]
          outs: v0[sp + #8]
    CODE: (code_offset=0x0000101c size_offset=0x00001018 size=4)...
      0x0000101c: d65f03c0    ret
  1: void HelloWorld.main(java.lang.String[]) (dex_method_idx=1)
    DEX CODE:
      0x0000: 6200 0000                    | sget-object  v0, Ljava/io/PrintStream; java.lang.System.out // field@0
      0x0002: 1a01 0100                    | const-string v1, "Hello world!" // string@1
      0x0004: 6e20 0200 1000               | invoke-virtual {v0, v1}, void java.io.PrintStream.println(java.lang.String) // method@2
      0x0007: 0e00                         | return-void
    OatMethodOffsets (offset=0x00000510)
      code_offset: 0x0000103c 
      gc_map: (offset=0x00000000)
    OatQuickMethodHeader (offset=0x00001020)
      mapping_table: (offset=0x00000000)
      vmap_table: (offset=0x00000526)
        Optimized CodeInfo (size=74, number_of_dex_registers=3, number_of_stack_maps=6, has_inline_info=0, number_of_bytes_for_inline_info=0, number_of_bytes_for_dex_register_map=1, number_of_bytes_for_dex_pc=1, number_of_bytes_for_native_pc=1, number_of_bytes_for_register_mask=3)
        DexRegisterLocationCatalog (number_of_entries=6, size_in_bytes=6)
            entry 0: in register (19)
            entry 1: in register (2)
            entry 2: in register (1)
            entry 3: in register (21)
            entry 4: in register (20)
            entry 5: in stack (16)
          StackMap 0 (dex_pc=0x0, native_pc_offset=0x8, dex_register_map_offset=0xffffffff, inline_info_offset=0xffffffff, register_mask=0x0, stack_mask=0b00000000)
          StackMap 1 (dex_pc=0x4, native_pc_offset=0x64, dex_register_map_offset=0x0, inline_info_offset=0xffffffff, register_mask=0x0, stack_mask=0b00000000)
            v0: in register (19)    [entry 0]
            v1: in register (2)    [entry 1]
            v2: in register (1)    [entry 2]
          StackMap 2 (dex_pc=0x4, native_pc_offset=0x70, dex_register_map_offset=0x3, inline_info_offset=0xffffffff, register_mask=0x380000, stack_mask=0b00000000)
            v0: in register (19)    [entry 0]
            v1: in register (21)    [entry 3]
            v2: in register (20)    [entry 4]
          StackMap 3 (dex_pc=0x0, native_pc_offset=0x8c, dex_register_map_offset=0x6, inline_info_offset=0xffffffff, register_mask=0x0, stack_mask=0b00010000)
            v2: in stack (16)    [entry 5]
          StackMap 4 (dex_pc=0x0, native_pc_offset=0xa4, dex_register_map_offset=0x6, inline_info_offset=0xffffffff, register_mask=0x0, stack_mask=0b00010000)
            v2: in stack (16)    [entry 5]
          StackMap 5 (dex_pc=0x2, native_pc_offset=0xbc, dex_register_map_offset=0xffffffff, inline_info_offset=0xffffffff, register_mask=0x80000, stack_mask=0b00010000)
    QuickMethodFrameInfo
      frame_size_in_bytes: 80
      core_spill_mask: 0x40380000 (r19, r20, r21, r30)
      fp_spill_mask: 0x00000000 
      vr_stack_locations:
          locals: v0[sp + #36] v1[sp + #40]
          ins: v2[sp + #88]
          method*: v3[sp + #0]
          outs: v0[sp + #8] v1[sp + #12]
    CODE: (code_offset=0x0000103c size_offset=0x00001038 size=200)...
      0x0000103c: d1400bf0    sub x16, sp, #0x2000 (8192)
      0x00001040: b940021f    ldr wzr, [x16]
      0x00001044: f81b0fe0    str x0, [sp, #-80]!
      0x00001048: a90353f3    stp x19, x20, [sp, #48]
      0x0000104c: a9047bf5    stp x21, lr, [sp, #64]
      0x00001050: 79400250    ldrh w16, [tr] (state_and_flags)
      0x00001054: 35000350    cbnz w16, #+0x68 (addr 0x10bc)
      0x00001058: f94003e0    ldr x0, [sp]
      0x0000105c: b9400800    ldr w0, [x0, #8]
      0x00001060: b9401c00    ldr w0, [x0, #28]
      0x00001064: 34000360    cbz w0, #+0x6c (addr 0x10d0)
      0x00001068: 11021010    add w16, w0, #0x84 (132)
      0x0000106c: 88dffe10    ldar w16, [x16]
      0x00001070: 71002a1f    cmp w16, #0xa (10)
      0x00001074: 540002eb    b.lt #+0x5c (addr 0x10d0)
      0x00001078: b9430013    ldr w19, [x0, #768]
      0x0000107c: f94003e2    ldr x2, [sp]
      0x00001080: b9400042    ldr w2, [x2]
      0x00001084: b9401442    ldr w2, [x2, #20]
      0x00001088: b9401042    ldr w2, [x2, #16]
      0x0000108c: 340002e2    cbz w2, #+0x5c (addr 0x10e8)
      0x00001090: aa0103f4    mov x20, x1
      0x00001094: aa1303e1    mov x1, x19
      0x00001098: aa0203f5    mov x21, x2
      0x0000109c: b9400020    ldr w0, [x1]
      0x000010a0: f941f800    ldr x0, [x0, #1008]
      0x000010a4: f940181e    ldr lr, [x0, #48]
      0x000010a8: d63f03c0    blr lr
      0x000010ac: a94353f3    ldp x19, x20, [sp, #48]
      0x000010b0: a9447bf5    ldp x21, lr, [sp, #64]
      0x000010b4: 910143ff    add sp, sp, #0x50 (80)
      0x000010b8: d65f03c0    ret
      0x000010bc: f9000be1    str x1, [sp, #16]
      0x000010c0: f9422e5e    ldr lr, [tr, #1112] (pInvokeVirtualTrampolineWithAccessCheck)
      0x000010c4: d63f03c0    blr lr
      0x000010c8: f9400be1    ldr x1, [sp, #16]
      0x000010cc: 17ffffe3    b #-0x74 (addr 0x1058)
      0x000010d0: f9000be1    str x1, [sp, #16]
      0x000010d4: 52800080    mov w0, #0x4
      0x000010d8: f941025e    ldr lr, [tr, #512] (pCheckCast)
      0x000010dc: d63f03c0    blr lr
      0x000010e0: f9400be1    ldr x1, [sp, #16]
      0x000010e4: 17ffffe5    b #-0x6c (addr 0x1078)
      0x000010e8: f9000be1    str x1, [sp, #16]
      0x000010ec: 52800020    mov w0, #0x1
      0x000010f0: f9410e5e    ldr lr, [tr, #536] (pInitializeType)
      0x000010f4: d63f03c0    blr lr
      0x000010f8: 2a0003e2    mov w2, w0
      0x000010fc: f9400be1    ldr x1, [sp, #16]
      0x00001100: 17ffffe4    b #-0x70 (addr 0x1090)

 

posted @ 2016-02-26 21:11  牧 天  阅读(1040)  评论(0)    收藏  举报