pythonee
V2EX  ›  Java

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

  •  
  •   pythonee · Sep 12, 2018 · 2863 views
    This topic created in 2974 days ago, the information mentioned may be changed or developed.
    可能不光是 Java,是否对所有高级语言,如果我们想拨开语言的背后原理,我们可能都需要反汇编分析一下

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

    一并感谢指教
    specita
    specita
    Sep 13, 2018
    5
    是这样的啊,之前看高手解决问题都是是直接反汇编....
    hx1997
    hx1997
    Sep 13, 2018 via Android
    6
    反汇编只能看到具体实现的原理,不代表这是语言本身的规定吧…
    Raymon111111
    Raymon111111
    Sep 13, 2018
    7
    不是, 这么看东西太慢了..
    szq8014
    szq8014
    Sep 13, 2018
    8
    我捡我学到皮毛的讲一下:
    1. 看指令知道了基于栈和基于寄存器的区别,基于栈的理解起来简单很多。
    2. JVM 里面操作数最少是 32 位的,byte (bipush), short (sipush)都需要转一下再操作
    3. class 文件里面变量名都是单独存储的,所以可以写一个程序单独用来替换编译后 class 中变量达到代码混淆的目的。(甚至是在执行代码里面添加一些 goto 跳转等指令来让反编译工具懵掉导致反编译失败,如果你非要跟这段代码杠的话用 javap 处理一下再自己人脑运行是可以的,就是费时间和精力)
    4. 顺便能了解一下 Class 里面的那些 static{} 以及 constructor 和 {} 里面的代码运行的先后顺序啥的
    5. 好像没有了
    luozic
    luozic
    Sep 29, 2018 via iPhone
    9
    jvm,LLVM,GCC 搞定了你就是大神。
    pythonee
    pythonee
    OP
    Sep 30, 2018
    10
    @luozic 嘤嘤嘤,暴击,还是多看书,多学习吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3811 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 05:33 · PVG 13:33 · LAX 21:33 · JFK 00:33
    ♥ Do have faith in what you're doing.