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》 在Java世界中,JVM(Java虚拟机)扮演着至关重要的角色,它负责解释和执行Java字节码,从而实现跨平台运行。为了优化性能和进行故障排查,开发者有时需要查看JVM内部的运作机制,而...
标题中的“windows-jdk-hsdis-amd64.rar”提到了Windows平台上的Java开发工具包(JDK)以及一个特定的组件“hsdis-amd64”。这个组件是HotSpot服务诊断工具(HSDis)的一部分,专为AMD64(也称为x86_64或64位Intel...
"hsdis-1.1.1-win32-i386" 是一个针对Windows 32位系统的特定版本的HotSpot服务端分解器(HotSpot Server Disassembler),主要用于Java虚拟机(JVM)的性能分析和调试。hsdis是JDK的一个插件,它能够帮助开发者理解...
《hsdis.dll与Java二进制反汇编详解》 在深入探讨hsdis.dll之前,首先需要理解什么是DLL(Dynamic Link Library)。DLL是Windows操作系统中的一种共享库文件,它包含可由多个程序同时使用的代码和数据。hsdis.dll是...
《深入理解HSDIS反汇编插件:Windows版的使用与原理》 HSDIS(HotSpot Disassembler)是Java HotSpot虚拟机的一款强大的反汇编插件,主要用于帮助开发者查看Java字节码在特定平台上的机器码表示。这款插件在Windows...
HSDis工具是Java HotSpot虚拟机的一个重要组成部分,主要用于帮助开发者理解JIT(Just-In-Time)编译器的工作原理。HotSpot虚拟机是Oracle JDK和OpenJDK中的默认虚拟机,它通过动态编译技术提高了Java应用程序的运行...
hsdis-amd64.dll和hsdis-i386.dll是与Java虚拟机(JVM)相关的动态链接库文件,主要用于Java性能分析和调试。这两个文件分别对应于AMD64(也称为x86_64或64位)和i386(32位)架构的处理器。在Java世界中,JVM是运行...
`hsdis-amd64.dll` 是一个与Java HotSpot虚拟机相关的动态链接库文件,主要用于JVM(Java Virtual Machine)的性能分析和调试。在Java世界中,HotSpot是Oracle公司开发的一种高性能的Java虚拟机实现,它包含了用于...
《深入理解Hotspot JIT的汇编码查看工具hsdis》 在Java世界中,Hotspot虚拟机是Oracle JDK和OpenJDK的重要组成部分,以其高效的运行性能和优化能力而著称。Hotspot虚拟机采用Just-In-Time (JIT) 编译技术,能够将...
《深入理解hsdis-amd64.dylib:JDK1.8中的HotSpot VM JIT编译与反汇编插件》 在Java世界中,HotSpot虚拟机是Oracle JDK的重要组成部分,它以其高效的运行性能和出色的优化能力而备受赞誉。HotSpot VM的核心特性之一...
《深入理解hsdis-i368.dll:JVM与汇编指令的桥梁》 在Java虚拟机(JVM)的世界里,性能优化是一项至关重要的任务。为了更好地理解和优化JVM的运行效率,开发者有时需要查看JVM如何将Java字节码转化为机器可执行的...
"hsdis-amd64.zip"这个压缩包,正是为了帮助开发者深入理解这一过程而提供的工具,特别适用于AMD64架构的系统。它包含了"hsdis-amd64.dll"这个动态链接库文件,是HotSpot虚拟机的一个插件,用于将Java字节码转换为...
解压后将 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是一个Java官方推荐 HotSpot虚拟机JIT编译代码的反汇编插件。我们有了这个插件后,通过JVM参数-XX:+PrintAssembly就可以加载这个HSDIS插件,然后为我们把JIT动态生成的那些本地代码还原成汇编代码,然后打印...
标题中的"hsdis-amd64.dll.rar"指的是一个RAR压缩包文件,包含hsdis-amd64.dll这个动态链接库(DLL)文件,专用于查看Java代码的底层汇编指令。DLL文件是Windows操作系统中的一种共享库,它包含可由多个程序同时使用...
hsdis-amd64.so
《hsdis-amd64.dll插件:洞察Java程序的汇编秘密》 hsdis-amd64.dll是一款专门针对Windows 10 64位系统设计的Java插件,其主要功能是将Java虚拟机(JVM)执行的字节码转化为汇编语言格式,这对于理解Java程序的底层...