首先我们先导入一些基本的包: asm-3.3.jar :操作java字节码的类库;(反射的替代方案,ASM是小巧轻便的 Java 字节码操控框架 ,它能方便地动态生成和改造 Java 代码。) asm-commons-3.3.jar :提供了基于事件的表现形式; asm-tree-3.3.jar ....
分类:
其他好文 时间:
2014-06-23 07:21:01
阅读次数:
209
一、代码混淆的定义
Java 是一种跨平台的、解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中。由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名、方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成 Java 源代码。为了防止这种现象,我们可以使用 Java 混淆器对 Java
字节码进行混淆。
混淆就是对...
分类:
移动开发 时间:
2014-06-22 19:47:12
阅读次数:
257
想玩Java这些事必须懂(二)JDK目录的组成 bin下有常用的javac和java命令 lib下有JDK工具命令的字节码tool.jar和dt.jar tool.jar中包含了javac和java可执行命令的字节码PATH和CLASSPATH的作用 PATH是系统变量的环境变量,当没...
分类:
编程语言 时间:
2014-06-22 12:31:07
阅读次数:
261
一、类载入器首先来看一下java程序的运行过程。 从这个框图非常easy大体上了解java程序工作原理。首先,你写好java代码,保存到硬盘其中。然后你在命令行中输入javac YourClassName.java此时,你的java代码就被编译成字节码(.class).假设你是...
分类:
编程语言 时间:
2014-06-18 10:59:48
阅读次数:
398
“打包“这个词听起来比较土,比较正式的说法应该是”构建项目软件包“,具体说就是将项目中的各种文件,比如源代码、编译生成的字节码、配置文件、文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR包了,复杂点的例子是Maven官方下载页面的分发包,它有自定义的格式,方便用户直接解压后就在命令行使...
分类:
其他好文 时间:
2014-06-18 10:47:04
阅读次数:
197
导言把一件简单的事情做复杂很容易,把一件复杂的事情做简单却不易。在计算机的世界里,冯.诺依曼把复杂的电脑简化为:存储器,控制器,运算器和I/O设备;丹尼斯·里奇把晦涩的汇编语言简化为258页的《C程序设计语言》;詹姆斯高斯林把繁琐的跨平台编码简化为256条字节码指令;对我们大部分人而言,把简单的事情...
分类:
Web程序 时间:
2014-06-18 08:22:25
阅读次数:
269
概述
诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下的jar文件以及classes目录下的class文件,另外像spring这类框架,也可以根据指定的路径扫描并加载指定的类文件,这个技术可以实现一个容器,容纳各类不同的子应用。
Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,不像C加载动态链接库只要一个文件名就可以搞定,但JDK仍提供了一整套...
分类:
编程语言 时间:
2014-06-18 07:06:58
阅读次数:
259
1.
Python虚拟机会从编译得到的PyCodeObject对象中依次读入每一条字节码指令,
并在当前的上下文环境中执行这条字节码指令。
Python虚拟机实际上是在模拟操作中执行文件的过程
PyCodeObject对象中包含了字节码指令以及程序的所有静态信息,但没有包含
程序运行时的动态信息——执行环境(PyFrameObject)
2.Python源码中的PyFrameObject
typedef struct _frame{
PyObject_VAR_HEAD //"运行时栈"的大小是不确定的...
分类:
编程语言 时间:
2014-06-18 06:33:24
阅读次数:
323
1.字节码指令
LOAD_CONST:从consts表中读取序号为i的元素并压入到运行时栈中
STORE_NAME:改变local名字空间。从符号表names取序号为i的元素作为变量名,
取运行时栈的栈顶元素作为变量值,完成从变量名到变量值的映射关系的创建。
BUILD_MAP:创建一个空的PyDictObject对象,并压入运行时栈
DUP_TOP:将栈顶元素的引用计数增加1,并将它再次压入栈中
ROT_TWO:将栈顶的两个元素进行对调
LOAD_NAME:符号搜索,并将该元素压入运行时栈
Py...
分类:
编程语言 时间:
2014-06-18 00:32:18
阅读次数:
295
函数里面的本地变量不会被初始化。在Java里面,本地变量其实就是本地变量数组的一个槽(slot)。作为一个类型安全的语言,Java强制要求对本地变量进行初始化。从字节码的角度,其必须有astore_?指令来对槽进行赋值。...
分类:
其他好文 时间:
2014-06-17 23:07:23
阅读次数:
271