首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏码匠的流水账

    聊聊SkyWalkingAgent

    > transform(DynamicType.Builder<? TypeDescription typeDescription, ClassLoader classLoader, JavaModule module, boolean loaded, DynamicType dynamicType) { if (logger.isDebugEnable()) { logger.debug("On Transformation ", typeDescription.getName()); } InstrumentDebuggingClass.INSTANCE.log(dynamicType 实现了AgentBuilder.Listener接口,其onTransformation方法会进行打印debug日志,以及执行InstrumentDebuggingClass.INSTANCE.log(dynamicType

    1.7K20发布于 2020-02-26
  • 来自专栏码匠的流水账

    聊聊skywalking的AbstractClassEnhancePluginDefine

    . */ public DynamicType.Builder<? > define(TypeDescription typeDescription, DynamicType.Builder } ​ /** * find origin class source code for interceptor */ DynamicType.Builder > enhance(TypeDescription typeDescription, DynamicType.Builder<? > transform(DynamicType.Builder<?

    65811发布于 2020-03-03
  • 来自专栏码匠的流水账

    聊聊skywalking的AbstractClassEnhancePluginDefine

    . */ public DynamicType.Builder<? > define(TypeDescription typeDescription, DynamicType.Builder } /** * find origin class source code for interceptor */ DynamicType.Builder > enhance(TypeDescription typeDescription, DynamicType.Builder<? > transform(DynamicType.Builder<?

    88720发布于 2020-03-12
  • 来自专栏Web开发之路

    C# 学习笔记(16)—— 动态类型

    (); d.CallMethod(); Console.ReadKey(); } } class DynamicType dynamicType) : base(expression, BindingRestrictions.Empty, dynamicType) { } public dynamicType = (DynamicType)base.Value; Expression self = Expression.Convert(base.Expression , typeof(DynamicType)); var restrictions = BindingRestrictions.GetInstanceRestriction(self , dynamicType); Console.WriteLine(binder.Name + "被调用了"); return new DynamicMetaObject

    53410编辑于 2023-10-20
  • 来自专栏CodeGuide | 程序员编码指南

    字节码编程,Byte-buddy篇一《基于Byte Buddy语法创建的第一个HelloWorld》

    在Byte buddy中默认提供了一个 dynamicType.saveIn() 方法,我们暂时先不使用,而是通过字节码进行保存。 2.2 创建类信息 DynamicType.Unloaded<? ") .make(); // 输出类字节码 outputClazz(dynamicType.getBytes()); 创建类和定义类名,如果不写类名会自动生成要给类名。 DynamicType.Unloaded<? > clazz = dynamicType.load(GenerateClazzMethod.class.getClassLoader()) .getLoaded(); // 反射调用

    61420发布于 2020-07-14
  • 来自专栏Java Study

    Java agent 与 byte buddy

    一:创建一个类 DynamicType.Unloaded<? > dynamicType = new ByteBuddy() .subclass(Object.class) .name("example.Type") //NamingStrategy 未命名 默认会随机生成类名   .make(); System.out.println(dynamicType.getClass()); 可以看到 Unloaded 没有进行加载 > dynamicType1 = new ByteBuddy() .subclass(Object.class) .name("example.Type") //NamingStrategy load(getClass().getClassLoader(),ClassLoadingStrategy.Default.WRAPPER).getLoaded(); System.out.println(dynamicType1

    2.2K00发布于 2020-08-10
  • 来自专栏Java极客技术

    字节码增强技术,不止有 Java Proxy、 Cglib 和 Javassist 还有 Byte Buddy

    > dynamicType = new ByteBuddy(). ByteBuddyDemo.class.getClassLoader()) .getLoaded(); System.out.println(dynamicType.newInstance System.out.println(e.getMessage()); } } public static void test2() { try { DynamicType.Unloaded .make(); DynamicType.Loaded<Object> load = unloaded.load(ByteBuddyDemo.class.getClassLoader “ 字符串; make:创建 DynamicType.Unloaded 对象,此时这个对象被构造出来,但是还没有被 JVM 加载,还不能使用; load,getLoaded:加载当前类的构造器,并进行加载

    1.3K00编辑于 2024-01-31
  • 来自专栏CodeGuide | 程序员编码指南

    字节码编程,Byte-buddy篇一《基于Byte Buddy语法创建的第一个HelloWorld》

    在Byte buddy中默认提供了一个 dynamicType.saveIn() 方法,我们暂时先不使用,而是通过字节码进行保存。 2.2 创建类信息 DynamicType.Unloaded<? ") .make(); // 输出类字节码 outputClazz(dynamicType.getBytes()); 创建类和定义类名,如果不写类名会自动生成要给类名。 DynamicType.Unloaded<? > clazz = dynamicType.load(GenerateClazzMethod.class.getClassLoader()) .getLoaded(); // 反射调用

    1.3K00发布于 2020-05-09
  • 来自专栏码匠的流水账

    聊聊SkyWalkingAgent

    > transform(DynamicType.Builder<? TypeDescription typeDescription, ClassLoader classLoader, JavaModule module, boolean loaded, DynamicType dynamicType) { if (logger.isDebugEnable()) { logger.debug("On Transformation ", typeDescription.getName()); } ​ InstrumentDebuggingClass.INSTANCE.log(dynamicType 实现了AgentBuilder.Listener接口,其onTransformation方法会进行打印debug日志,以及执行InstrumentDebuggingClass.INSTANCE.log(dynamicType

    1.6K00发布于 2020-02-23
  • 来自专栏FreeBuf

    Doldrums:一款功能强大的逆向工程分析工具

    libapp.so output 工具期待的输出即为导出的所有类,下面给出的是导出类的格式: class MyApp extends StatelessWidget { Widget build(DynamicType , DynamicType) { Code at absolute offset: 0xec85c } String myPrint(DynamicType, DynamicType) { Code at absolute offset: 0xeca80 } } 绝对代码偏移量表明的是原生函数在libapp.so文件中的具体位置。

    1.6K20发布于 2021-11-08
  • 来自专栏快乐阿超

    byte-buddy

    > dynamicType = new ByteBuddy() .subclass(Object.class) .method(ElementMatchers.named("toString") .make() .load(getClass().getClassLoader()) .getLoaded(); assertThat(dynamicType.newInstance().toString

    1.2K50编辑于 2023-01-10
  • 来自专栏CodeGuide | 程序员编码指南

    字节码编程,Byte-buddy篇一《基于Byte Buddy语法创建的第一个HelloWorld》

    在Byte buddy中默认提供了一个 dynamicType.saveIn() 方法,我们暂时先不使用,而是通过字节码进行保存。 2.2 创建类信息 DynamicType.Unloaded<? ") .make(); // 输出类字节码 outputClazz(dynamicType.getBytes()); 创建类和定义类名,如果不写类名会自动生成要给类名。 DynamicType.Unloaded<? > clazz = dynamicType.load(GenerateClazzMethod.class.getClassLoader()) .getLoaded(); // 反射调用

    1.3K00发布于 2020-05-08
  • 来自专栏码匠的流水账

    聊聊skywalking的AbstractPlatformTransactionManagerInstrumentation

    . */ @Override protected DynamicType.Builder<? > enhance(TypeDescription typeDescription, DynamicType.Builder<? * @return new byte-buddy's builder for further manipulation. */ private DynamicType.Builder > enhanceInstance(TypeDescription typeDescription, DynamicType.Builder<? > enhanceClass(TypeDescription typeDescription, DynamicType.Builder<?

    59200发布于 2020-03-04
  • 来自专栏CodeGuide | 程序员编码指南

    字节码编程,Byte-buddy篇二《监控方法执行耗时动态获取出入参类型和值》

    创建监控主体类 @Test public void test_byteBuddy() throws Exception { DynamicType.Unloaded<? > dynamicType = new ByteBuddy() .subclass(BizMethod.class) .method(ElementMatchers.named > clazz = dynamicType.load(ApiTest.class.getClassLoader()) .getLoaded(); // 反射调用 常用核心API ByteBuddy 流式API方式的入口类 提供Subclassing/Redefining/Rebasing方式改写字节码 所有的操作依赖DynamicType.Builder进行,创建不可变的对象 方法调用返回固定值) MethodDelegation(方法调用委托,支持两种方式: Class的static方法调用、object的instance method方法调用) Builder(用于创建DynamicType

    1.6K10发布于 2020-07-14
  • 来自专栏CodeGuide | 程序员编码指南

    字节码编程,Byte-buddy篇二《监控方法执行耗时动态获取出入参类型和值》

    创建监控主体类 @Test public void test_byteBuddy() throws Exception { DynamicType.Unloaded<? > dynamicType = new ByteBuddy() .subclass(BizMethod.class) .method(ElementMatchers.named > clazz = dynamicType.load(ApiTest.class.getClassLoader()) .getLoaded(); // 反射调用 常用核心API ByteBuddy 流式API方式的入口类 提供Subclassing/Redefining/Rebasing方式改写字节码 所有的操作依赖DynamicType.Builder进行,创建不可变的对象 方法调用返回固定值) MethodDelegation(方法调用委托,支持两种方式: Class的static方法调用、object的instance method方法调用) Builder(用于创建DynamicType

    1.9K00发布于 2020-05-13
  • 来自专栏FoamValue

    Byte Buddy 基础知识

    > dynamicType = new ByteBuddy() .subclass(Object.class) .method(ElementMatchers.named make() .load(ByteBuddy.class.getClassLoader()) .getLoaded(); System.out.println(dynamicType.newInstance ().toString()); assertThat(dynamicType.newInstance().toString(), is("Hello World!"))

    1.8K10发布于 2020-08-31
  • 来自专栏后端技术学习

    java agent和byte-buddy组合的简单使用

    AgentBuilder.Transformer transformer = new AgentBuilder.Transformer() { public DynamicType.Builder > transform(DynamicType.Builder<?

    1.6K10编辑于 2024-02-17
  • 来自专栏kl的专栏

    skywalking源码分析之javaAgent工具ByteBuddy的应用

    transform(DynamicType.Builder builder, TypeDescription typeDescription, ClassLoader classLoader, JavaModule 与原始的ASM类似,“intercept”会告诉Byte Buddy为拦截到的指令提供方法实现: Class dynamicType = new ByteBuddy() .subclass(Object.class 这样,我们就可以检验生成的类重写了 toString方法,如下面的代码所示: assertThat(dynamicType.newInstance().toString(), is ; } } 借助上面的POJO拦截器,我们就可以将之前的FixedValue实现替换为MethodDelegation.to(ToStringInterceptor.class): Class dynamicType 创建子类与rebase的行为是非常类似的,所以两种操作的API执行方式是一致的,都会使用相同的DynamicType.Builder接口来描述某个类型。

    3.6K80发布于 2018-04-13
  • 来自专栏全栈程序员必看

    Java Agent字节码增强技术实现链路追踪[通俗易懂]

    > transform(DynamicType.Builder<? pluginFinder.find(typeDescription); if (classEnhancePluginDefines.size() > 0) { //判断当前插件是否符合当前的拦截对象 DynamicType.Builder 方法去获取到动态类型构造器,就是去返回需要匹配方法的增强方法 for (ClassEnhancePluginDefine define : classEnhancePluginDefines) { DynamicType.Builder > define(DynamicType.Builder<? > define(DynamicType.Builder<?

    1.7K41编辑于 2022-11-17
  • 来自专栏码客

    iOS 打印视图结构

    = 0) -> Void { let className = "\(superView.dynamicType)"; let frame = "\(superView.frame)";

    86010发布于 2019-10-22
领券