6

java分布式(java反汇编)

 3 years ago
source link: https://blog.csdn.net/feixiaoxing/article/details/113808763
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

java分布式(java反汇编)

费晓行 2021-02-14 16:35:36 160
分类专栏: java分布式

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

    学过c或者cpp的同学都知道,exe或者dll、so、a文件都可以反汇编成对应的汇编文件。当然,这个和对应的cpu也有关系。比如,如果是x86程序,那么只能翻译成x86的代码,如果是arm的程序,那么只能反汇编成对应的arm程序。这个时候,很多同学会说,如果是java的程序,有没有办法看到对应的反汇编代码。其实是可以的。对应的工具就是javap程序。

1、编写简单的java代码

2、编译java程序

javac hello.java

3、观察是否生成了两个class文件,运行hello

java hello

4、如果hello中有正常的结果,那么就可以确认程序执行成功

55

5、查看hello的反汇编

javap -c hello

6、hello的反汇编为

7、反汇编process

javap -c process

8、process的反汇编代码为

9、分析汇编代码

    不妨以类process为例,从反汇编来看,总共有3个函数,分别是process()、iterate()、show()

    其中process()源代码中并没有涉及,这个应该是默认编译的

    另外整个java汇编的意义也并不复杂,我们以iterate为例,依次阅读,

    指令总共编号到15,

    指令0:取常数0

    指令1:取输入参数

    指令2:常数0和输入参数比较,如果相等,继续执行;如果不等,跳到7

    指令5:取常数1

    指令6:函数返回

    指令7:加载输入参数

    指令8:加载常数1

    指令9:调用isub函数

    指令10:继续调用static iterate函数

    指令13:加载输入参数

    指令14:调用isub函数

    指令15:函数返回

10、小技巧

    单独学习汇编是非常枯燥的,可以一边写java程序,一边用javap反汇编成汇编代码的形式,

    常常可以达到事半功倍的效果,

    这样写的java代码都是已知的,这个时候可以一边学习汇编,一边猜具体汇编的意思,

    逐步通过赋值、判断、循环、类、静态类这些代码,慢慢掌握整个java反汇编的指令意义。

    现在android的虚拟机多采用smaili汇编,和这个差不多。可以无缝转过去的。

    https://segmentfault.com/a/1190000012669267

    当然和java反汇编比较,重点还是c&c++的反汇编,这部分有点复杂,还要需要学习不同cpu的指令集,比如x86、arm指令集,这部分要多多掌握。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK