HotSpot反汇编插件HSDIS下载使用

「已注销」 2020-06-27 11:35:03
HotSpot反汇编插件HSDIS下载使用

今天学习《深入理解Java虚拟机》第4章,介绍了HSDIS的使用,生成汇编代码的解读。自己实践了一下。

1.首先从Project Kenai网站(http://kenai.com/projects/base-hsdis)上下载反汇编的插件HSDIS,打开网站后显示:

好可惜网站已经关闭了。于是我第一时间到CSDN网站上搜索,资源倒是搜到了,不过下载需要最少17币,唉!现在国内的平台收费机制……所以又辗转到GitHub上下载了~免费的(已上传到我的资源-免费)。下载完了解压把dll放到JAVA_HOME/jre/bin/client和JAVA_HOME/jre/bin/server目录下;

2.按书编写Bar.java,代码如下:

package com.test.MonitorTool;

public class Bar {
int a = 1;
static int b = 2;
public int sum(int c){
return a+b+c;
}
public static void main(String[] args) {
new Bar().sum(3);
}
}

3.将Bar.java放在了D:\com\test\MonitorTool目录;
然后用javac命令编译一下,生成Bar.class;
然后可以执行java命令:
D:\>java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -Xcomp -XX:CompileCom
mand=dontinline,*Bar.sum -XX:CompileCommand=compileonly,*Bar.sum com.test.Monito
rTool.Bar
注意如果出现:Unrecognized VM option '+PrintAssembly' 一定要添加-XX:+UnlockDiagnosticVMOptions 如上;
最后生成反汇编代码:
Code:
[Disassembling for mach='i386:x86-64']
[Entry Point]
[Constants]
# {method} 'sum' '(I)I' in 'com/test/MonitorTool/Bar'
# this: rdx:rdx = 'com/test/MonitorTool/Bar'
# parm0: r8 = int
# [sp+0x20] (sp of caller)
0x00000000020e1120: mov 0x8(%rdx),%r10d
0x00000000020e1124: shl $0x3,%r10
0x00000000020e1128: cmp %r10,%rax
0x00000000020e112b: jne 0x00000000020b7720 ; {runtime_call}
0x00000000020e1131: data32 xchg %ax,%ax
0x00000000020e1134: nopl 0x0(%rax,%rax,1)
0x00000000020e113c: data32 data32 xchg %ax,%ax
[Verified Entry Point]
0x00000000020e1140: push %rbp
0x00000000020e1141: sub $0x10,%rsp
0x00000000020e1145: nop ;*synchronization entry
; - com.test.MonitorTool.Bar::su
m@-1 (line 8)
0x00000000020e1146: movabs $0x77d6ee0f0,%r10 ; {oop('com/test/MonitorTool/B
ar')}
0x00000000020e1150: mov 0x260(%r10),%r10d
0x00000000020e1157: add 0xc(%rdx),%r10d
0x00000000020e115b: mov %r8d,%eax
0x00000000020e115e: add %r10d,%eax ;*iadd
; - com.test.MonitorTool.Bar::su
m@9 (line 8)
0x00000000020e1161: add $0x10,%rsp
0x00000000020e1165: pop %rbp
0x00000000020e1166: test %eax,-0x1d5116c(%rip) # 0x0000000000390000
; {poll_return}
0x00000000020e116c: retq
0x00000000020e116d: hlt
0x00000000020e116e: hlt
0x00000000020e116f: hlt
0x00000000020e1170: hlt
0x00000000020e1171: hlt
0x00000000020e1172: hlt
0x00000000020e1173: hlt
0x00000000020e1174: hlt
0x00000000020e1175: hlt
0x00000000020e1176: hlt
0x00000000020e1177: hlt
0x00000000020e1178: hlt
0x00000000020e1179: hlt
0x00000000020e117a: hlt
0x00000000020e117b: hlt
0x00000000020e117c: hlt
0x00000000020e117d: hlt
0x00000000020e117e: hlt
0x00000000020e117f: hlt
[Exception Handler]
[Stub Code]
0x00000000020e1180: jmpq 0x00000000020de1a0 ; {no_reloc}
[Deopt Handler Code]
0x00000000020e1185: callq 0x00000000020e118a
0x00000000020e118a: subq $0x5,(%rsp)
0x00000000020e118f: jmpq 0x00000000020b88c0 ; {runtime_call}
0x00000000020e1194: add %al,(%rax)
0x00000000020e1196: add %al,(%rax)

内容解释参考教材说明啦~

拜~~
...全文
62 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧