`
BruceChan_GY
  • 浏览: 6980 次
社区版块
存档分类
最新评论

HSDIS

    博客分类:
  • JVM
阅读更多
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都没有反汇编成功,后续再搞
分享到:
评论

相关推荐

    hsdis-1.1.1-win32-i386

    hsdis-1.1.1-win32-i386 hsdis-1.1.1-win32-i386 hsdis-1.1.1-win32-i386

    jvm反汇编插件hsdis

    jvm反汇编插件hsdis 32位和64位,放入如:\Java\jdk1.8.0_141\jre\bin\server

    Windows(64位)环境下的HSDIS.zip

    解压后将 hsdis-amd64.dll 文件放入 JDK_HOME/jre/bin/server目录(JDK 9以下)或 JDK_HOME/lib/amd64/server(JDK 9或以上)中即可。 如无法正常使用,可以尝试将 hsdis-amd64.dll 文件放入 C:\Program Files\Java\...

    hsdis-amd64.dll

    解决:Could not load hsdis-amd64.dll; library not loadable; PrintAssembly is disabled 问题.下载对应版本解压得到dll,保存到jdk目录下\jre\bin\server就可以了

    windows64 hsdis-amd64.dll

    jvm开启-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly 需要hsdis-amd64.dll支持才能输出汇编代码,这是编译好的dll,用于windows64位,java9需要放到bin/server中,java8放到jre/bin/server

    Hsdis Java汇编指令工具

    HSDIS是一个Sun官方推荐的HotSpot虚拟机JIT编译代码的反汇编插件。它的作用是让HotSpot的-XX:+PrintAssembly指令调用它来把动态生成的本地代码还原为汇编代码输出,同时还生成了大量非常有价值的注释,这样我们就...

    hsdis-i386.dll

    hsdis-i386.dll

    hsdis-amd64.dll和hsdis-i386.dll

    hsdis-amd64.dll和hsdis-i386.dll

    用于查看Hotspot的JIT的汇编码 hsdis

    其中包含以下文件:hsdis-amd64.dll、hsdis-i386.dll、linux-hsdis-amd6、linux-hsdis-i386。用于查看Hotspot的JIT的汇编码。

    hsdis-amd64.dll-jdk8

    HSDIS是一个Java官方推荐 HotSpot虚拟机JIT编译代码的反汇编插件。我们有了这个插件后,通过JVM参数-XX:+PrintAssembly就可以加载这个HSDIS插件,然后为我们把JIT动态生成的那些本地代码还原成汇编代码,然后打印...

    hsdis.dll-master.zip

    HSDIS 反汇编插件windows版,mac和linux版可以从GitHub上寻找。解压后将dll放到JAVA_HOME/jre/bin/client即可使用。

    hsdis-amd64.dll-jdk11

    HSDIS是一个Java官方推荐 HotSpot虚拟机JIT编译代码的反汇编插件。我们有了这个插件后,通过JVM参数-XX:+PrintAssembly就可以加载这个HSDIS插件,然后为我们把JIT动态生成的那些本地代码还原成汇编代码,然后打印...

    hsdis-amd64.so

    hsdis-amd64.so

    hsdis-amd64.dll 插件

    我弄成压缩包了,适用于win10 64位的hsdis插件,用于把Java程序以汇编格式输出,解压后即可使用里面的hsdis-amd64.dll。

    HSDIS工具(.class->汇编)

    已经编译好的Windows上的HSDIS库,放在JDK_HOME/jre/bin/client和JDK_HOME/jre/binserver文件夹下就可以使用,具体使用命令可查看博客https://blog.csdn.net/qq_32483145/article/details/80229140

Global site tag (gtag.js) - Google Analytics