`

CLASS 文件使用例子一

    博客分类:
  • JVM
阅读更多

上一节我们分析了一个简单的HelloWorld的class文件,那知道了这个结构有什么用呢,接下来我们通过几个例子来简单的了解一下。

一、先看一个简单的例子,这个例子了,我们通过直接改变二进制的class文件,改变程序的行为,以前面的HelloWorld为例。

先看java 文件:

 

 

public class HelloWorld{
	public static void main(String [] arvgs){
	  System.out.println("hello world");
}
}

 

它的class文件:

 

 

00000000h: CA FE BA BE 00 00 00 2E 00 1D 0A 00 06 00 0F 09 ; 漱壕............
00000010h: 00 10 00 11 08 00 12 0A 00 13 00 14 07 00 15 07 ; ................
00000020h: 00 16 01 00 06 3C 69 6E 69 74 3E 01 00 03 28 29 ; .....<init>...()
00000030h: 56 01 00 04 43 6F 64 65 01 00 0F 4C 69 6E 65 4E ; V...Code...LineN
00000040h: 75 6D 62 65 72 54 61 62 6C 65 01 00 04 6D 61 69 ; umberTable...mai
00000050h: 6E 01 00 16 28 5B 4C 6A 61 76 61 2F 6C 61 6E 67 ; n...([Ljava/lang
00000060h: 2F 53 74 72 69 6E 67 3B 29 56 01 00 0A 53 6F 75 ; /String;)V...Sou
00000070h: 72 63 65 46 69 6C 65 01 00 0F 48 65 6C 6C 6F 57 ; rceFile...HelloW
00000080h: 6F 72 6C 64 2E 6A 61 76 61 0C 00 07 00 08 07 00 ; orld.java.......
00000090h: 17 0C 00 18 00 19 01 00 0B 68 65 6C 6C 6F 20 77 ; .........hello w
000000a0h: 6F 72 6C 64 07 00 1A 0C 00 1B 00 1C 01 00 0A 48 ; orld...........H
000000b0h: 65 6C 6C 6F 57 6F 72 6C 64 01 00 10 6A 61 76 61 ; elloWorld...java
000000c0h: 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 01 00 10 6A ; /lang/Object...j
000000d0h: 61 76 61 2F 6C 61 6E 67 2F 53 79 73 74 65 6D 01 ; ava/lang/System.
000000e0h: 00 03 6F 75 74 01 00 15 4C 6A 61 76 61 2F 69 6F ; ..out...Ljava/io
000000f0h: 2F 50 72 69 6E 74 53 74 72 65 61 6D 3B 01 00 13 ; /PrintStream;...
00000100h: 6A 61 76 61 2F 69 6F 2F 50 72 69 6E 74 53 74 72 ; java/io/PrintStr
00000110h: 65 61 6D 01 00 07 70 72 69 6E 74 6C 6E 01 00 15 ; eam...println...
00000120h: 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 ; (Ljava/lang/Stri
00000130h: 6E 67 3B 29 56 00 21 00 05 00 06 00 00 00 00 00 ; ng;)V.!.........
00000140h: 02 00 01 00 07 00 08 00 01 00 09 00 00 00 1D 00 ; ................
00000150h: 01 00 01 00 00 00 05 2A B7 00 01 B1 00 00 00 01 ; .......*?.?...
00000160h: 00 0A 00 00 00 06 00 01 00 00 00 01 00 09 00 0B ; ................
00000170h: 00 0C 00 01 00 09 00 00 00 25 00 02 00 01 00 00 ; .........%......
00000180h: 00 09 B2 00 02 12 03 B6 00 04 B1 00 00 00 01 00 ; ..?...?.?....
00000190h: 0A 00 00 00 0A 00 02 00 00 00 03 00 08 00 04 00 ; ................
000001a0h: 01 00 0D 00 00 00 02 00 0E                      ; .........

 

 

 通过上一篇文章,找到第18号常量池,它是一个constant_utf8类型,在第 000000a0h行  bytes=0X 68 65 6C 6C 6F 20 77 6F 72 6C 64表示的正好是我们要输出的内容,“hello world”,其中0X6F 表示 0,现在我们将其替换为0X 70 表示 p ,替换后如下:

 

 

00000000h: CA FE BA BE 00 00 00 2E 00 1D 0A 00 06 00 0F 09 ; 漱壕............
00000010h: 00 10 00 11 08 00 12 0A 00 13 00 14 07 00 15 07 ; ................
00000020h: 00 16 01 00 06 3C 69 6E 69 74 3E 01 00 03 28 29 ; .....<init>...()
00000030h: 56 01 00 04 43 6F 64 65 01 00 0F 4C 69 6E 65 4E ; V...Code...LineN
00000040h: 75 6D 62 65 72 54 61 62 6C 65 01 00 04 6D 61 69 ; umberTable...mai
00000050h: 6E 01 00 16 28 5B 4C 6A 61 76 61 2F 6C 61 6E 67 ; n...([Ljava/lang
00000060h: 2F 53 74 72 69 6E 67 3B 29 56 01 00 0A 53 6F 75 ; /String;)V...Sou
00000070h: 72 63 65 46 69 6C 65 01 00 0F 48 65 6C 6C 6F 57 ; rceFile...HelloW
00000080h: 6F 72 6C 64 2E 6A 61 76 61 0C 00 07 00 08 07 00 ; orld.java.......
00000090h: 17 0C 00 18 00 19 01 00 0B 68 65 6C 6C 6F 20 77 ; .........hello w
000000a0h: 70 72 6C 64 07 00 1A 0C 00 1B 00 1C 01 00 0A 48 ; prld...........H
000000b0h: 65 6C 6C 6F 57 6F 72 6C 64 01 00 10 6A 61 76 61 ; elloWorld...java
000000c0h: 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 01 00 10 6A ; /lang/Object...j
000000d0h: 61 76 61 2F 6C 61 6E 67 2F 53 79 73 74 65 6D 01 ; ava/lang/System.
000000e0h: 00 03 6F 75 74 01 00 15 4C 6A 61 76 61 2F 69 6F ; ..out...Ljava/io
000000f0h: 2F 50 72 69 6E 74 53 74 72 65 61 6D 3B 01 00 13 ; /PrintStream;...
00000100h: 6A 61 76 61 2F 69 6F 2F 50 72 69 6E 74 53 74 72 ; java/io/PrintStr
00000110h: 65 61 6D 01 00 07 70 72 69 6E 74 6C 6E 01 00 15 ; eam...println...
00000120h: 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 ; (Ljava/lang/Stri
00000130h: 6E 67 3B 29 56 00 21 00 05 00 06 00 00 00 00 00 ; ng;)V.!.........
00000140h: 02 00 01 00 07 00 08 00 01 00 09 00 00 00 1D 00 ; ................
00000150h: 01 00 01 00 00 00 05 2A B7 00 01 B1 00 00 00 01 ; .......*?.?...
00000160h: 00 0A 00 00 00 06 00 01 00 00 00 01 00 09 00 0B ; ................
00000170h: 00 0C 00 01 00 09 00 00 00 25 00 02 00 01 00 00 ; .........%......
00000180h: 00 09 B2 00 02 12 03 B6 00 04 B1 00 00 00 01 00 ; ..?...?.?....
00000190h: 0A 00 00 00 0A 00 02 00 00 00 03 00 08 00 04 00 ; ................
000001a0h: 01 00 0D 00 00 00 02 00 0E                      ; .........

   

发现出了红色的不一样之外,其他都是一样的,运行看到如下结果: 发现 o--->p ,查看ASCII表 0X 6F=o ,0x 70 =p,因为UTF8 英文跟ASCII码一样,所以有这样的结果。


 

 

 本站支持 pay for your wishes

  • 大小: 12.3 KB
1
2
分享到:
评论

相关推荐

    jclasslib修改class文件

    java修改class文件使用的jclasslib.jar、javassist.jar等等文件。相关步骤、还有一个idea项目示例。(当时找了好久的jclasslib.jar文件,最后才找到一个可用的)

    class文件格式分析实验

    自己结合class文件格式做的一个小实验,尽管小能直观的展示class文件内部的构造,这个文档对class文件中的每个字节都多了分析

    Java文件转换为 Exe 可执行文件

    对于前面的例子 test.exe,对应的配置文件为 test.cfg。 如果将 jre 的文件夹 "jre1.5.0" 随同 test.exe 一同发布,则配置文件 test.cfg 可以写成: jvmdll jre1.5.0\bin\client\jvm.dll 3.3 运行库 CLASSPATH ...

    weak_classdump, Cycript实时classdump加密二进制文件的替代方案.zip

    weak_classdump, Cycript实时classdump加密二进制文件的替代方案 weak_classdump生成传递给函数的类的头文件的Cycript脚本。当你不能 classdump,当二进制文件被加密时,最有用的。用法示例:root# cycript -p Skype...

    java反编译class源码-JavaDecompiler:如何将.class文件反编译回.java文件以查看源代码

    如何将.class文件反编译回.java文件以查看源代码 0.安装Java并设置Path(如果尚未完成) 1.下载java-decompiler.jar文件 2.语法和示例 java -cp org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler ...

    【JavaScript源代码】vue 使用class创建和清除水印的示例代码.docx

     页面添加水印的方法有很多,以下举例使用class定义的方法进行水印内容渲染: 1、新建文件:WatermarkClass.js export default class WatermarkClass { constructor({id="watermarkID", str = "", fontSize = 18...

    使用Python编写的示例代码,生成一个数据类,类成员有整型,浮点数组,字符串数组,使用Numpy将类保存到文件,最后读取文件

    示例代码中,我们使用Numpy的np.savez函数将数据类对象保存到文件。我们将数据类的整型、浮点数数组和字符串数组存储在一个数据字典中,然后使用np.savez将其保存到文件中。为了从文件中读取数据,我们使用np.load...

    60种C#窗体皮肤ssk文件(含使用方法及示例,使用超简单)

    1. 先把IrisSkin2.dll文件添加到当前项目引用(解决方案资源管理器-&gt;当前项目-&gt;引用-&gt;右键-&gt;添加引用 ,找到IrisSkin2.dll文件.....之后就不用我说了吧^_^).IrisSkin2.dll文件最好放在当前项目\bin\Debug文件中. 2. ...

    qt调用JAVA文件示例

    本示例主要演示在QT开发android APP时,怎样通用调用JAVA文件,实现android原生操作

    Python 从一个文件中调用另一个文件的类方法

    如果是在同一个 module中(也就是同一个py文件里),直接用就可以 如果在不同的module里,例如 a.py里有 class A: b.py 里有 class B: 如果你要在class B里用class A 需要在 b.py的开头写上 from a import A 举个例子:...

    php HttpRequest class HTTP请求类及调用示例.rar

    一个牛人写的PHP HttpRequest class HTTP请求类,支持GET,POST,Multipart/form-data,类中函数的参数说明:  setConfig 设置连接参数  setFormdata 设置表单数据  setFiledata 设置文件数据  send 发送数据  ...

    Java中Class类工作原理详解

    换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名的.class文件中)。在运行时,当我们想生成这个类的对象时,运行这个程序的 Java虚拟机(JVM)首先检查这个类的Class对象...

    jquery采用oop模式class类的使用示例

    本文实例讲述了jquery采用oop模式class类的使用方法。分享给大家供大家参考,具体如下: 这里用class来管理jquery的各个function,我觉得很方便,并且代码可读性也很强。以前我喜欢建文件写function,再包括文件,到...

    基于jenkins发布编译后的class文件

    主要介绍了基于jenkins发布编译后的class文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java和js操作XML文件

    java和js操作XML文件,结合例子详细讲解java和js操作XML文件。

    DELPHI搜索文件的示例

    搜索TXT 文件的示例unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ...

    Hibernate实践例子程序

    2. Hibernate Extention,用来自动生成与那些*.hbm.xml对应的POJO,也就是根据那些对象关系映射的配置文件生成相应的class文件。 HibernateEx里面有一个hbm2java工具,就是用来根据些配置文件生成相应的POJO class。...

    Spring bean 动态注册,jar包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...

    dex2jar:用于处理 android .dex 和 java .class 文件的工具

    这里有一个例子 dex-translator 旨在完成转换工作。 它读取dex指令为dex-ir格式,经过一些优化,转换为ASM格式。 dex-translator 使用的 dex-ir,旨在表示 dex 指令 dex-tools 工具来处理 .class 文件。 以下是...

    文件尾部分割器

    说明 ...(2)修改其后第一个1为待分割的大小(单位MB) (3)修改split.log为分割生成的文件名。 (4)保存run.bat,将FileSplitter.class和run.bat拷贝至x.log相同的目录中,并双击run.bat执行。

Global site tag (gtag.js) - Google Analytics