吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2246|回复: 0
收起左侧

[Java 转载] 【笔记】第一次对比java源码与class文件

[复制链接]
吃泡面加不起蛋 发表于 2022-3-9 13:29
这里是写的函数的源码

    public void startLogin(int n, String string, long l, String string2, byte[] byArray, int n2, boolean bl) {
        String string3 = String.valueOf(l) + "=" + string2;
        byte[] byArray2 = string3.getBytes();
        this.ccc(byArray2, (byte)1);
    }

这里是class文件并进行的注释

DEFINE PUBLIC startLogin(I 1, Ljava/lang/String; 2, J 3, Ljava/lang/String; 5, [B 6, I 7, Z 8)V
A:
LINE A 15
NEW java/lang/StringBuilder
DUP
INVOKESPECIAL java/lang/StringBuilder.<init>()V
LLOAD 3 //参数1,最上面的J 3
INVOKESTATIC java/lang/String.valueOf(J)Ljava/lang/String; //调用静态方法valueOf,返回类型为 Ljava/lang/String;。将J 3变成了String
INVOKEVIRTUAL java/lang/StringBuilder.append(Ljava/lang/String;)Ljava/lang/StringBuilder; //调用函数append,参数为上一步的String
LDC "=" //参数1,文本型
INVOKEVIRTUAL java/lang/StringBuilder.append(Ljava/lang/String;)Ljava/lang/StringBuilder; //调用函数append,参数为上面的 “=”
ALOAD 5 //参数1,Ljava/lang/String; 5
INVOKEVIRTUAL java/lang/StringBuilder.append(Ljava/lang/String;)Ljava/lang/StringBuilder; //调用函数append,将 Ljava/lang/String; 参数为上面的  5
INVOKEVIRTUAL java/lang/StringBuilder.toString()Ljava/lang/String; //调用函数,toString(),返回类型为 Ljava/lang/String;
ASTORE 9 //将返回结果压入变量9

B:
LINE B 16
ALOAD 9 //参数1,变量9
INVOKEVIRTUAL java/lang/String.getBytes()[B //调用函数getBytes(),返回类型为[B
ASTORE 10 //将返回结果压入变量10

C:
LINE C 18
ALOAD this //调用对象自身
ALOAD 10 //参数1,变量10
ICONST_4 //参数2,4(int)值入栈。
INVOKEVIRTUAL tmp/aaa.ccc([BB)V //调用函数

D:
LINE D 20
RETURN


/**
每一行代码对应一个字母加冒号,最后的D:应该是编译时自动添加的return
参考资料,百度搜索 java汇编指令大全
*/

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表