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

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都没有反汇编成功,后续再搞
分享到:
评论

相关推荐

    jvm反汇编插件hsdis

    《深入理解JVM反汇编插件HSDis》 在Java世界中,JVM(Java虚拟机)扮演着至关重要的角色,它负责解释和执行Java字节码,从而实现跨平台运行。为了优化性能和进行故障排查,开发者有时需要查看JVM内部的运作机制,而...

    windows-jdk-hsdis-amd64.rar

    标题中的“windows-jdk-hsdis-amd64.rar”提到了Windows平台上的Java开发工具包(JDK)以及一个特定的组件“hsdis-amd64”。这个组件是HotSpot服务诊断工具(HSDis)的一部分,专为AMD64(也称为x86_64或64位Intel...

    hsdis-1.1.1-win32-i386

    "hsdis-1.1.1-win32-i386" 是一个针对Windows 32位系统的特定版本的HotSpot服务端分解器(HotSpot Server Disassembler),主要用于Java虚拟机(JVM)的性能分析和调试。hsdis是JDK的一个插件,它能够帮助开发者理解...

    hsdis.dll.zip

    《hsdis.dll与Java二进制反汇编详解》 在深入探讨hsdis.dll之前,首先需要理解什么是DLL(Dynamic Link Library)。DLL是Windows操作系统中的一种共享库文件,它包含可由多个程序同时使用的代码和数据。hsdis.dll是...

    hsdis.dll-master.zip

    《深入理解HSDIS反汇编插件:Windows版的使用与原理》 HSDIS(HotSpot Disassembler)是Java HotSpot虚拟机的一款强大的反汇编插件,主要用于帮助开发者查看Java字节码在特定平台上的机器码表示。这款插件在Windows...

    hsdis工具,hotspot虚拟机插件,反汇编jit编译代码

    HSDis工具是Java HotSpot虚拟机的一个重要组成部分,主要用于帮助开发者理解JIT(Just-In-Time)编译器的工作原理。HotSpot虚拟机是Oracle JDK和OpenJDK中的默认虚拟机,它通过动态编译技术提高了Java应用程序的运行...

    hsdis-amd64.dll和hsdis-i386.dll

    hsdis-amd64.dll和hsdis-i386.dll是与Java虚拟机(JVM)相关的动态链接库文件,主要用于Java性能分析和调试。这两个文件分别对应于AMD64(也称为x86_64或64位)和i386(32位)架构的处理器。在Java世界中,JVM是运行...

    hsdis-amd64.dll

    `hsdis-amd64.dll` 是一个与Java HotSpot虚拟机相关的动态链接库文件,主要用于JVM(Java Virtual Machine)的性能分析和调试。在Java世界中,HotSpot是Oracle公司开发的一种高性能的Java虚拟机实现,它包含了用于...

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

    《深入理解Hotspot JIT的汇编码查看工具hsdis》 在Java世界中,Hotspot虚拟机是Oracle JDK和OpenJDK的重要组成部分,以其高效的运行性能和优化能力而著称。Hotspot虚拟机采用Just-In-Time (JIT) 编译技术,能够将...

    hsdis-amd64.dylib

    《深入理解hsdis-amd64.dylib:JDK1.8中的HotSpot VM JIT编译与反汇编插件》 在Java世界中,HotSpot虚拟机是Oracle JDK的重要组成部分,它以其高效的运行性能和出色的优化能力而备受赞誉。HotSpot VM的核心特性之一...

    hsdis-i368.dll

    《深入理解hsdis-i368.dll:JVM与汇编指令的桥梁》 在Java虚拟机(JVM)的世界里,性能优化是一项至关重要的任务。为了更好地理解和优化JVM的运行效率,开发者有时需要查看JVM如何将Java字节码转化为机器可执行的...

    hsdis-amd64.zip

    "hsdis-amd64.zip"这个压缩包,正是为了帮助开发者深入理解这一过程而提供的工具,特别适用于AMD64架构的系统。它包含了"hsdis-amd64.dll"这个动态链接库文件,是HotSpot虚拟机的一个插件,用于将Java字节码转换为...

    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-jdk11

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

    hsdis-amd64.dll.rar

    标题中的"hsdis-amd64.dll.rar"指的是一个RAR压缩包文件,包含hsdis-amd64.dll这个动态链接库(DLL)文件,专用于查看Java代码的底层汇编指令。DLL文件是Windows操作系统中的一种共享库,它包含可由多个程序同时使用...

    hsdis-amd64.so

    hsdis-amd64.so

    hsdis-amd64.dll 插件

    《hsdis-amd64.dll插件:洞察Java程序的汇编秘密》 hsdis-amd64.dll是一款专门针对Windows 10 64位系统设计的Java插件,其主要功能是将Java虚拟机(JVM)执行的字节码转化为汇编语言格式,这对于理解Java程序的底层...

Global site tag (gtag.js) - Google Analytics