HSDIS

root@ubuntu:~/Downloads# ./jdk1.6.0_45/bin/java  -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+DebugNonSafepoints  HelloWorld
Hello OpenJDK
-1


root@ubuntu:~/Downloads# ./jdk1.6.0_45/bin/java  -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+DebugNonSafepoints  HelloWorld
Hello OpenJDK
-1

root@ubuntu:~/Downloads# ./jdk1.7.0_80/bin/java  -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+DebugNonSafepoints  HelloWorld
Hello OpenJDK
-1


root@ubuntu:~/Downloads# ./jdk1.8.0_20/bin/java  -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+DebugNonSafepoints  HelloWorld
Could not load [b]hsdis-amd64.so[/b]; library not loadable; PrintAssembly is disabled
Hello OpenJDK
-1


下载hsdis: https://kenai.com/projects/base-hsdis/downloads

linux-hsdis-amd64.so

改名为hsdis-amd64.so,放入/root/Downloads/jdk1.8.0_20/jre/lib/amd64/server

暂时只有JDK1.8有用,1.6和1.7都没生效,具体先不找原因(可能是要类似debug版本)。
---这里1.6和1.7不生效,应该是HOTSPOT的JIT导致的,我们增加参数-Xcomp,就可以了


root@ubuntu:~/Downloads# ./jdk1.8.0_20/bin/java  -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+DebugNonSafepoints  HelloWorld > disass.log


截取indexOf部分:
Decoding compiled method 0x00007fe4b8276810:
Code:
[Entry Point]
[Constants]
# {method} {0x00007fe4b6316148} 'indexOf' '(II)I' in 'java/lang/String'
# this: rsi:rsi = 'java/lang/String'
# parm0: rdx = int
# parm1: rcx = int
# [sp+0x40] (sp of caller)
0x00007fe4b82769a0: mov 0x8(%rsi),%r10d
0x00007fe4b82769a4: shl $0x3,%r10
0x00007fe4b82769a8: cmp %rax,%r10
0x00007fe4b82769ab: jne 0x00007fe4b81b3b60 ; {runtime_call}
0x00007fe4b82769b1: nopw 0x0(%rax,%rax,1)
0x00007fe4b82769bc: xchg %ax,%ax
[Verified Entry Point]
0x00007fe4b82769c0: mov %eax,-0x14000(%rsp)
0x00007fe4b82769c7: push %rbp
0x00007fe4b82769c8: sub $0x30,%rsp
0x00007fe4b82769cc: mov $0x7fe4b64ff8b8,%rax ; {metadata(method data for {method} {0x00007fe4b6316148} 'indexOf' '(II)I' in 'java/lang/String')}


<截断>

关于hsdis,可以查看openjdk的文档:
../openjdk/hotspot/src/share/tools/hsdis/README

'hsdis':  A HotSpot plugin for disassembling dynamically generated code.

The files in this directory (Makefile, hsdis.[ch], hsdis-demo.c)
are built independently of the HotSpot JVM.

To use the plugin with a JVM, you need a new version that can load it.
If the product mode of your JVM does not accept -XX:+PrintAssembly,
you do not have a version that is new enough.



另外使用HSDB和SAPlugin都没有反汇编成功,后续再搞
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值