此外,由于采用了新的方式对字节码进行校验,我们还能确保编译的代码在运行时的类型安全。
如果所要检测的问题可以表述为一组字节码模式,则模式检测器是一种好的选择。
曾经有段时间,大家一听到“字节码操作(bytecodemanipulation)”就懵了。
用JVM的指令形式表示该代码,一般称为字节码,这是下一节要讨论的主题之一。
一个应用中有多少代码能转化成字节码依赖于几个因素。
然而,需要注意的是,它并没有将Perl代码转换为C代码,只是将Perl字节码嵌入一个基于C的应用程序中。
但是,由于这种操作高昂的计算开销,MIDPVM不在运行时执行完整的字节码验证。
在这篇文章后面,当我讨论字节码生成的细节时,我还会回到这一问题上。
毕竟,也许有人已经用十六进制编辑器手工修改了字节符,试图触发缓冲器溢出。
构成类文件可执行部分的字节码实际上是针对特定类型的计算机―JVM―的机器码。
即使适当地采取了这些安全性措施,也并非所有通过字节码验证的代码都被允许运行。
而这些指令没有参数,所以需要扩展二进制代码的定义以支持多个锁定请求。
由于C#和通用语言架构的标准化,字节码现在已经官方地成为了CIL。
我遇到的一些问题是BCEL特有的,但是其他问题在其他字节码框架中也有。
我为JiBX2.0开发定的目标之一就是增加用源代码增强代替字节码增强的选项。
可以使用一个简单的GUI界面或者控制台应用程序来在应用程序类文件上运行字节码增强。
这条原则在字节码操作中有用,在API设计中一样有用。
BCEL实现的字节码处理看起来也过于复杂,虽然有很强的灵活性,但是要操纵的对象数量也极为巨大。
mixin的每个实例化被编译成独立的Java类;各个副本上不存在任何共享的字节码。
一个例子是方法参数的名称以及各种通用类型信息,它们已经从Java移动到字节码中。
正如我在所有字节码的源代码中提到的,Javassist所使用的源代码与Java语言并不完全一样。
JIT的通常会导致在一个应用程序的初始执行略有延误,由于采取了加载和字节码编译的时间。
这个例子包含几个分支,三个分支语句的字节码显示为粗体。
与字节码生成相同,绑定编译器总是对一个绑定组件生成相同的源代码标志序列。
字节码验证过程保证了应用程序不能访问内存空间或使用其域外的资源。
Retroweaver包含两个逻辑组件:一个字节码增强器和一个运行时库。
但是这个转换器在概念上仍然是无足轻重的;从Java字节码到Dalvik字节码的映射在设计上是很平滑的。
这种方法的优点是其简单性:JRE开发人员只需编写代码来处理每种字节码即可。
即使如此,使用源代码的编程技术与字节码的编程技术之间仍然存在实质的不同。
1·Even with these security measures in place, not all code that passes bytecode verification should be allowed to run.
即使适当地采取了这些安全性措施,也并非所有通过字节码验证的代码都被允许运行。
2·Because of this greater ease of debugging, I was able to add some significant new features to the bytecode generation before the 1.0 release.
因为在调试方面轻松了许多,我就可以在1.0版发行之前向字节码生成添加一些更重要的新特性了。
3·In either case, you accumulate information about which exceptions are thrown at what bytecode offset in the method, so you can match them up after you've have finished processing the whole method.
在任何一种情况下,都可以积累关于哪些异常在方法中的哪个字节码偏移量被抛出的信息,这样,在完成整个方法的处理后,可以将它们进行匹配。
4·Some of the problems I ran into are specific to BCEL, but others apply to other bytecode frameworks as well.
我遇到的一些问题是bcel特有的,但是其他问题在其他字节码框架中也有。
5·You can either use a simple GUI interface or a console application to run the bytecode enhancements on your application class files.
可以使用一个简单的 GUI 界面或者控制台应用程序来在应用程序类文件上运行字节码增强。
1·Run some events through it, watch it load classes, compile bytecode, and of course, manage memory.
对它运行一些事件,观察它加载类、编译字节代码以及管理内存。
2·For the next article, we'll look into the advanced features of this framework that provide search-and-replace techniques for editing bytecode.
对于下一篇文章,我们将探讨这个框架的高级特性,这些特性提供用于编辑字节代码的查找和替换技术。
3·According to Ben, one of the capabilities Coverity has over other bytecode scanners is the ability to identify behavior in the code and anomalies that are likely to be mistakes.
按照Ben的说法,Coverity强于其它字节代码扫描工具的能力是:它可以通过代码定义行为,确定可能导致出错的部分。