V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pythonee
V2EX  ›  Java

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

  •  
  •   pythonee · 2018-09-12 23:44:46 +08:00 · 1999 次点击
    这是一个创建于 2297 天前的主题,其中的信息可能已经有所发展或是发生改变。
    可能不光是 Java,是否对所有高级语言,如果我们想拨开语言的背后原理,我们可能都需要反汇编分析一下

    不知道大家平常一般会怎么做呢?
    10 条回复    2018-09-30 09:51:11 +08:00
    ETiV
        1
    ETiV  
       2018-09-13 00:02:13 +08:00 via iPhone   ❤️ 1
    Oracle JVM Specification 4.x 章有讲~
    innoink
        2
    innoink  
       2018-09-13 00:08:27 +08:00 via Android   ❤️ 1
    请学习编译原理
    misaka19000
        3
    misaka19000  
       2018-09-13 00:10:16 +08:00   ❤️ 1
    javap
    pythonee
        4
    pythonee  
    OP
       2018-09-13 09:00:14 +08:00
    @ETiV
    @innoink
    @misaka19000

    一并感谢指教
    specita
        5
    specita  
       2018-09-13 09:29:56 +08:00
    是这样的啊,之前看高手解决问题都是是直接反汇编....
    hx1997
        6
    hx1997  
       2018-09-13 10:01:50 +08:00 via Android
    反汇编只能看到具体实现的原理,不代表这是语言本身的规定吧…
    Raymon111111
        7
    Raymon111111  
       2018-09-13 10:24:22 +08:00
    不是, 这么看东西太慢了..
    szq8014
        8
    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
        9
    luozic  
       2018-09-29 20:37:32 +08:00 via iPhone
    jvm,LLVM,GCC 搞定了你就是大神。
    pythonee
        10
    pythonee  
    OP
       2018-09-30 09:51:11 +08:00
    @luozic 嘤嘤嘤,暴击,还是多看书,多学习吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1216 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:14 · PVG 02:14 · LAX 10:14 · JFK 13:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.