可以从 Java 的字节码中获取什么信息?是否深入 Java 学习的重要途径

2018-09-12 23:44:46 +08:00
 pythonee
可能不光是 Java,是否对所有高级语言,如果我们想拨开语言的背后原理,我们可能都需要反汇编分析一下

不知道大家平常一般会怎么做呢?
1999 次点击
所在节点    Java
10 条回复
ETiV
2018-09-13 00:02:13 +08:00
Oracle JVM Specification 4.x 章有讲~
innoink
2018-09-13 00:08:27 +08:00
请学习编译原理
misaka19000
2018-09-13 00:10:16 +08:00
javap
pythonee
2018-09-13 09:00:14 +08:00
@ETiV
@innoink
@misaka19000

一并感谢指教
specita
2018-09-13 09:29:56 +08:00
是这样的啊,之前看高手解决问题都是是直接反汇编....
hx1997
2018-09-13 10:01:50 +08:00
反汇编只能看到具体实现的原理,不代表这是语言本身的规定吧…
Raymon111111
2018-09-13 10:24:22 +08:00
不是, 这么看东西太慢了..
szq8014
2018-09-13 11:01:51 +08:00
我捡我学到皮毛的讲一下:
1. 看指令知道了基于栈和基于寄存器的区别,基于栈的理解起来简单很多。
2. JVM 里面操作数最少是 32 位的,byte (bipush), short (sipush)都需要转一下再操作
3. class 文件里面变量名都是单独存储的,所以可以写一个程序单独用来替换编译后 class 中变量达到代码混淆的目的。(甚至是在执行代码里面添加一些 goto 跳转等指令来让反编译工具懵掉导致反编译失败,如果你非要跟这段代码杠的话用 javap 处理一下再自己人脑运行是可以的,就是费时间和精力)
4. 顺便能了解一下 Class 里面的那些 static{} 以及 constructor 和 {} 里面的代码运行的先后顺序啥的
5. 好像没有了
luozic
2018-09-29 20:37:32 +08:00
jvm,LLVM,GCC 搞定了你就是大神。
pythonee
2018-09-30 09:51:11 +08:00
@luozic 嘤嘤嘤,暴击,还是多看书,多学习吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/488724

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX