当前位置: 首页 > news >正文

仿网站工具php技师培训

仿网站工具php,技师培训,男人和女人做污的视频网站,制作一个网站就等于制作一个网页写在前面 本文看下如何获取class字节码文件的魔数和版本号信息。 1:正文 需要对class字节码的结构有一定的了解,可以参考这篇文章 。 直接看代码: package org.example;import java.math.BigInteger;public class TTTT {//取部分字节码&…

写在前面

本文看下如何获取class字节码文件的魔数和版本号信息。

1:正文

需要对class字节码的结构有一定的了解,可以参考这篇文章 。

直接看代码:

package org.example;import java.math.BigInteger;public class TTTT {//取部分字节码:java.lang.Stringprivate static byte[] classData = {-54, -2, -70, -66, 0, 0, 0, 52, 2, 26, 3, 0, 0, -40, 0, 3, 0, 0, -37, -1, 3, 0, 0, -33, -1, 3, 0, 1, 0, 0, 8, 0,59, 8, 0, 83, 8, 0, 86, 8, 0, 87, 8, 0, 110, 8, 0, -83, 8, 0, -77, 8, 0, -49, 8, 0, -47, 1, 0, 3, 40, 41, 73, 1,0, 20, 40, 41, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 79, 98, 106, 101, 99, 116, 59, 1, 0, 20, 40, 41,76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 1, 0, 3, 40, 41, 86, 1, 0, 3,40, 41, 90, 1, 0, 4, 40, 41, 91, 66, 1, 0, 4, 40, 41, 91, 67, 1, 0, 4, 40, 67, 41, 67, 1, 0, 21, 40, 68, 41, 76,106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 1, 0, 4, 40, 73, 41, 67, 1, 0, 4};public static void main(String[] args) {// 显示值是按照有符号数来展示的,为了获取原始的无符号数对应的值,需要与上0xFF,即11111111,这样就转换为无符号数了(不知道为啥啊,反正就这样!!!)。System.out.println("* byte字节码与运算原值(-54)换行后(-54 & 0x0FF):" + (-54 & 0x0FF));//校验魔数readAndCheckMagic();//校验版本号readAndCheckVersion();}/*** 前四个字节是魔术!!!* 校验魔数* <p>* 很多文件格式都会规定满足该格式的文件必须以某几个固定字节开头,这几个字节主要起到标识作用,叫作魔数(magic number)。* 例如;* PDF文件以4字节“%PDF”(0x25、0x50、0x44、0x46)开头,* ZIP文件以2字节“PK”(0x50、0x4B)开头* class文件以4字节“0xCAFEBABE”开头*/private static void readAndCheckMagic() {System.out.println("\r\n------------ 校验魔数 ------------");// 从class字节码中读取前四位,就是魔数,u4类型byte[] magic_byte = new byte[4];System.arraycopy(classData, 0, magic_byte, 0, 4);// 将4位byte字节转成16进制字符串String magicNumberInHex = new BigInteger(1, magic_byte).toString(16);System.out.println("class文件魔数16进制表示为:" + magicNumberInHex);// magicNumberInHex 是16进制的字符串,cafebabe,因为java中没有无符号整型,所以如果想要无符号只能放到更高位中long magic_unsigned_int32 = Long.parseLong(magicNumberInHex, 16);System.out.println("魔术转换为无符号表示(Java没有无符号数,所以转long来表示)magic_unsigned_int32:" + magic_unsigned_int32);//魔数比对,一种通过字符串比对,另外一种使用假设的无符号16进制比较。如果使用无符号比较需要将0xCAFEBABE & 0x0FFFFFFFFL与运算System.out.println("0xCAFEBABE & 0x0FFFFFFFFL(这样也可以转换为正整数表示):" + (0xCAFEBABE & 0xFFFFFFFFL));// 通过比较字节码中获取的和cafebabe的实际值,得出是否是一个class字节码文件(当然不一定合法,因为后续还有很多内容)if (magic_unsigned_int32 == (0xCAFEBABE & 0x0FFFFFFFFL)) {System.out.println("class字节码魔数无符号16进制数值一致校验通过");} else {System.out.println("class字节码魔数无符号16进制数值一致校验拒绝");}}/**** 校验版本号* <p>* 魔数之后是class文件的次版本号和主版本号,都是u2类型。假设某class文件的主版本号是M,次版本号是m,那么完整的版本号可以* 表示成“M.m”的形式。次版本号只在J2SE 1.2之前用过,从1.2开始基本上就没有什么用了(都是0)。主版本号在J2SE 1.2之前是45,* 从1.2开始,每次有大版本的Java版本发布,都会加1{45、46、47、48、49、50、51、52}*/private static void readAndCheckVersion() {System.out.println("\r\n------------ 校验版本号 ------------");//从class字节码第4位开始读取,读取2位byte[] minor_byte = new byte[2];// u2 5,6两个字节是minor version信息System.arraycopy(classData, 4, minor_byte, 0, 2);//将2位byte字节转成16进制字符串String minor_hex_str = new BigInteger(1, minor_byte).toString(16);System.out.println("小版本号16进制表示:" + minor_hex_str);//minor_unsigned_int32 转成无符号16进制int minor_unsigned_int32 = Integer.parseInt(minor_hex_str, 16);System.out.println("小版本号十进制整数表示:" + minor_unsigned_int32);//从class字节码第6位开始读取,读取2位byte[] major_byte = new byte[2];// u2 7,8两个字节是major version信息System.arraycopy(classData, 6, major_byte, 0, 2);//将2位byte字节转成16进制字符串String major_hex_str = new BigInteger(1, major_byte).toString(16);System.out.println("主版本号16进制表示:" + major_hex_str);//major_unsigned_int32 转成无符号16进制int major_unsigned_int32 = Integer.parseInt(major_hex_str, 16);System.out.println("主版本号整数表示:" + major_unsigned_int32);System.out.println("完整版本号:" + major_unsigned_int32 + "." + minor_unsigned_int32);}}

详细的看注释吧,有什么不明白的可留言!
运行如下:

* byte字节码与运算原值(-54)换行后(-54 & 0x0FF):202------------ 校验魔数 ------------
class文件魔数16进制表示为:cafebabe
魔术转换为无符号表示(Java没有无符号数,所以转long来表示)magic_unsigned_int32:3405691582
0xCAFEBABE & 0x0FFFFFFFFL(这样也可以转换为正整数表示):3405691582
class字节码魔数无符号16进制数值一致校验通过------------ 校验版本号 ------------
小版本号16进制表示:0
小版本号十进制整数表示:0
主版本号16进制表示:34
主版本号整数表示:52
完整版本号:52.0Process finished with exit code 0

写在后面

参考文章列表

class字节码文件结构是什么样子的? 。

http://www.hkea.cn/news/82290/

相关文章:

  • 淄博企业网站建设有限公司搜索引擎关键词竞价排名
  • 网站的优点企业专业搜索引擎优化
  • 哪里有软件开发培训机构无锡seo培训
  • 网站怎么做反链seo是什么品牌
  • 技术型网站做哪一种好软文范例大全100
  • 百度搜索什么关键词能搜到网站seo高效优化
  • 网站搭建分站需要多少钱互联网营销策划
  • 音乐网站的音乐怎么做seo先上排名后收费
  • 清河做网站报价seo实战培训王乃用
  • wordpress 回收站在哪个文件夹营销方式和手段
  • 垂直型电商网站如何做快速排名软件哪个好
  • 做产品推广有网站比较好的免费自助建站平台
  • 番禺网站建设公司排名百度推广页面投放
  • 沈阳做微网站百度收录刷排名
  • 网站建设与管理技术发展seo是什么意思如何实现
  • 手机游戏开发制作公司最新seo视频教程
  • 网站优化过度被k长春seo排名公司
  • wordpress移除谷歌字体seo网站推广与优化方案
  • 十大景观设计公司排名seo权重查询
  • 水友做的yyf网站十大免费引流平台
  • 东莞公司网站制作百度识图网页版 在线
  • 企业级网站内容管理解决方案网站关键词快速排名服务
  • 影视采集网站怎么做收录关键词是网站seo的核心工作
  • 开发一个网站需要多少时间百度账号免费注册
  • 化妆品网站主页设计长沙关键词优化方法
  • 南阳建网站企业百度推广优化工具
  • 怎样把自己做的网页放在网站里如何做宣传推广营销
  • 七谷网络工作室重庆优化seo
  • 东莞网站建设规范软文内容
  • 项目网站建设业务分析搜索优化的培训免费咨询