javassist

How to verify Java Bytecode before injecting into the JVM?

孤人 提交于 2021-02-19 07:27:47
问题 I'm trying to verify "on the fly" generated bytecode! I already had several attempts, one attempt was to compile my classes in runtime with the eclipse compiler another was to compile from memory as mentioned here: Compile From Memory First results looked okay but I'm still not a 100% sure if the verification process is truly valid according to the JAVA 6 guidelines and security measurements as well to normal OOP Models. Any better way on how to verify bytecode? 回答1: If you load the generated

get CtClass using specific ClassLoader

ぐ巨炮叔叔 提交于 2021-02-10 18:44:44
问题 I have a class structure like this: package com.mydomain.myproject; public class Outer{ public class Inner{ //some code } } Now, I can get a CtClass of the inner class using: ClassPool pool=ClassPool.getDefault(); CtClass innerCt=pool.getCtClass("com.mydomain.myproject.Outer$Inner"); The problem occurs if those classes are loaded by a special ClassLoader . ClassPool#getCtClass fails because the ClassLoader it uses doesn't know of the class. I get the following exception: javassist

get CtClass using specific ClassLoader

纵饮孤独 提交于 2021-02-10 18:41:10
问题 I have a class structure like this: package com.mydomain.myproject; public class Outer{ public class Inner{ //some code } } Now, I can get a CtClass of the inner class using: ClassPool pool=ClassPool.getDefault(); CtClass innerCt=pool.getCtClass("com.mydomain.myproject.Outer$Inner"); The problem occurs if those classes are loaded by a special ClassLoader . ClassPool#getCtClass fails because the ClassLoader it uses doesn't know of the class. I get the following exception: javassist

Java游戏服务器4

独自空忆成欢 提交于 2021-02-05 10:09:02
1)消息识别器: 根据消息号,创建一个Builder。 2)javassist:动态修改字节码。==》用于ormtest 原生反射很慢,那我可以用javaassist来加速 3)一些框架没有实现类,是怎么实现出来的。 4)多线程与IO 5)先讲解移动。 攻击的话,就是涉及到多线程的问题。 6)A和B同时攻击C时,A和B 分别在自己的线程,因此有并发访问安全的问题。 7)多个线程操作同一份数据,数据不一致的问题。解决方案 (1)加锁 synchronized: 一个减血的函数暂时没有问题: 执行效率不高甚至都不是关键的。 但是如果有别的函数呢? attkUser(User user); 这种带来了死锁。 互砍造成了死锁!!! jps ==》 得到进程及其对应的pid,,如自己Server的pid。 jstack 7996 ==》得到死锁信息。 数据不一致,和死锁。 减少锁的粒度,可以减少死锁(并非避免死锁)。 但是开发困难,与业务逻辑重合了。 (2)脏读:多线程操作同一份数据,脏读。 volatile也不行。它只保证2个线程是可见的。 不能是原子的。 (3)atomic: 单个操作,能保证线程安全,用cas原语保证,但是十分臃肿! 道具的id,任务的状态。。。对象太大,太臃肿的。 但是,同时操作a和b,则依然是数据不一致的问题。 来源: oschina 链接: https://my

Does javassist let modify an operator in a conditional expression?

梦想的初衷 提交于 2021-01-27 06:39:45
问题 I need to know if with the following code and with javassist I can manipulate the code to replace the logical operator ">" with "<". Here is the class whose bytecode I want to manipulate: public class TryClass { public void foo(){ int a =0; if(a>5){ System.out.println("I love apples"); } else{ System.out.println("I hate apples"); } } } After the manipulation the execution of the class should print: "I love apples" instead of: "I hate apples" 回答1: there is no < or > at the byte code level per

leetCode Rotate Image

99封情书 提交于 2020-12-12 02:23:53
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). do this in-place 将矩阵顺时针旋转90度,并且不开辟多余的空间。 00 01 02 03 10 11 12 13 20 21 22 23 30 31 32 33 思路:只旋转1/4的元素,且不包含右边对角线上的元素(橙色部分)。 计算公式为:如果matrix为n阶方阵,则转换公式为: matrix[x,y]---->matrix[y][n-1-x]---->matrix[n-1-x][n-1-y]---->matrix[n-1-y][x]---->matrix[x][y] 对应JS代码为: var b = function(matrix){ var n = matrix[0].length; var temp; var count=0; for(var i=0;i<n/2;i++){ for(var j=i;j<n-i-1;j++){ temp = matrix[i][j]; matrix[i][j] = matrix[n-1-j][i]; matrix[n-1-j][i] = matrix[n-1-i][n-1-j]; matrix[n-1-i][n-1-j] =

破旧立新,精准测试之道

与世无争的帅哥 提交于 2020-11-25 13:43:38
前言 第一次听到精准测试是在几年前了,那一瞬间就对这个流派充满了好奇和探索的欲望,最近几年逐渐得到了各领域各行业中测试人员的广泛关注,那么问题来了: 什么是精准测试; 精准测试的意义和价值在哪里; 精准测试整体方案如何落地; 传统测试的痛点 测试效率低下 常规的测试类型包括功能测试、回归测试、自动化测试、接口测试等,非常依赖于测试人员的测试经验,基于人工主观分析的黑盒测试,借助常规的用例设计方法来确保产品质量。 根据收益递减规律,虽然大量的人力投入,不断的执行测试,但是漏测率还是居高不下。中间的无效测试和重复测试也浪费了大量的测试成本。 测试范围无法评估 多分支代码合并到主分支,修改哪个文件哪个行,测试不可控; 代码更新影响哪些功能无感知; 大部分的测试还是基于对业务的理解,与真实业务数据还有差距,准确性难以保证,盲测,风险大; 测试过程中的质量标准无法衡量 怎么样判定测试完成,怎么样判定测的怎么样?质量控制贯穿于整个质量保障流程。 用例执行完成; 探索性测试完成; 开发人员缺陷修复完成; 回归测试完成; 自动化执行通过; 上述步骤完成意味着我们的产品质量是合格的吗? 上线之后的非一致性成本逐渐增高,测试过程没有数据量化的评定,无法衡量,只能依赖线上缺陷率,线下缺陷数,千行缺陷率等比较飘的指标来评定,测试管理难度大。 敏捷模式和分布式微服务架构下的挑战 迭代周期短

java的内部类和静态内部类(嵌套类)

大憨熊 提交于 2020-10-15 19:50:45
背景 开发新项目,写Swager的mode的时候用到了嵌套Model,于是在代码中,出现了静态内部类。在codeReview的时候稍微和大家聊了一下。尤其是Static 修饰类和修饰对象和变量不一样呢? 定义 1. 内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类; 嵌套类是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有的也是如此。静态嵌套类无权访问封闭类的其他成员。为一体的一个部件OuterClass,一个嵌套类可以声明private,public,protected,或包专用。(回想一下,只能声明外部类public或将其包装为私有。) 2. 静态内部类 再一个普通类里面,给内部类加上static关键字的修饰; 与类方法和变量一样,静态嵌套类与其外部类相关联。与静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法:它只能通过对象引用来使用它们。(就和两个普通不同的类之间的使用) 3. 两者的区别 内部类只是外部类的成员变量,通俗讲,就是你只能通过先调用外部类才能去拿到这个类(但是这是和组合还是有区别的)。 但是静态内部类就像是一个普通类一样。可以直接调用,直接去new对象。 4. Java 拥有嵌套类有什么作用呢? 这是一种对仅在一个地方使用的类进行逻辑分组的方法:如果一个类仅对另一个类有用

CVE-2020-14644 weblogic iiop反序列化漏洞

拥有回忆 提交于 2020-10-02 20:38:26
360cert文章地址: https://cert.360.cn/report/detail?id=b747e983cd8f70a9eb315c2c7b38fe24 0x00 weblogic 受影响版本 Oracle WebLogic Server 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0 0x01 环境准备 1、安装weblogic server版本。 2、生成wlfullclient.jar包 安装weblogic_server可以参考 https://blog.csdn.net/qq_36868342/article/details/79967606 。 wlfullclient可以通过,在安装完weblogic服务以后,来到 ~/Oracle/Middleware/Oracle_Home/wlserver/server/lib 目录,运行 java -jar ~/Oracle/Middleware/Oracle_Home/wlserver/modules/com.bea.core.jarbuilder.jar ,就会在lib目录下生成一个wlfullclient.jar包。这个wlfullclient.jar包包含了weblogic的基本所有功能类。 3、在IDEA新建一个工程文件。把coherence.jar包和wlfullclient

BeanUtils 是用 Spring 的还是 Apache 的好?

江枫思渺然 提交于 2020-09-29 05:12:52
来源 | urlify.cn/vUfIry 前言 在我们实际项目开发过程中,我们经常需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信息,比如DTO数据传输对象和数据对象DO,我们需要将DO对象进行属性复制到DTO,但是对象格式又不一样,所以我们需要编写映射代码将对象中的属性值从一种类型转换成另一种类型。 这种转换最原始的方式就是手动编写大量的 get/set 代码,当然这是我们开发过程不愿意去做的,因为它确实显得很繁琐。为了解决这一痛点,就诞生了一些方便的类库,常用的有 apache的 BeanUtils ,spring的 BeanUtils , Dozer , Orika 等拷贝工具。这篇文章主要介绍 Apache的BeanUtils 与 Spring 的BeanUtils,其他框架后续文章再做介绍 对象拷贝 在具体介绍两种 BeanUtils之前,先来补充一些基础知识。它们两种工具本质上就是对象拷贝工具,而对象拷贝又分为深拷贝和浅拷贝,下面进行详细解释。 什么是浅拷贝和深拷贝 在Java中,除了 基本数据类型 之外,还存在 类的实例对象 这个引用数据类型,而一般使用 “=”号做赋值操作的时候,对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去