精华内容
下载资源
问答
  • // 以文件的方式扫描整个包下的文件 并添加到集合中 findAndAddClassesInPackageByFile ( basePackage , filePath , recursive , classes ) ; } } } catch ( IOException e ) { e . ...

    这个是我在模拟实现Spring的依赖注入(无参构造和注解方式)的小demo时使用到的,因为是scala体系,所以想研究下Java的Spring框架,看有什么可以借鉴的地方。

    获得对应包的所有文件:(需要配合后面的findAndAddClassesInPackageByFile方法)

    //获得所有的类的Class
    protected List<Class<?>> getClasses(String basePackage){
        List<Class<?>> classes = new ArrayList<Class<?>>();
        // 是否循环迭代
        boolean recursive = true;
        // 获取包的名字 并进行替换
        String packageDirName = basePackage.replace('.', '/');
        // 定义一个枚举的集合 并进行循环来处理这个目录下的things
        Enumeration<URL> dirs;
        try {
            dirs = Thread.currentThread().getContextClassLoader().getResources(packageDirName);
            // 循环迭代下去
            while (dirs.hasMoreElements()) {
                // 获取下一个元素
                URL url = dirs.nextElement();
                // 得到协议的名称
                String protocol = url.getProtocol();
                // 如果是以文件的形式保存在服务器上
                if ("file".equals(protocol)) {
                    // 获取包的物理路径
                    String filePath = URLDecoder.decode(url.getFile(), "UTF-8");
                    // 以文件的方式扫描整个包下的文件 并添加到集合中
                    findAndAddClassesInPackageByFile(basePackage, filePath, recursive, classes);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return classes;
    }
    

    查询包下所有的类,并且添加到集合中

    protected void findAndAddClassesInPackageByFile(String basePackage, String filePath, boolean recursive, List<Class<?>> classes){
        // 获取此包的目录 建立一个File
        File dir = new File(filePath);
        // 如果不存在或者 也不是目录就直接返回
        if (!dir.exists() || !dir.isDirectory()) {
            return;
        }
        // 如果存在 就获取包下的所有文件 包括目录
        File[] dirfiles = dir.listFiles(new FileFilter() {
            // 自定义过滤规则 如果可以循环(包含子目录) 或则是以.class结尾的文件(编译好的java类文件)
            public boolean accept(File file) {
                return (recursive && file.isDirectory()) || (file.getName().endsWith(".class"));
            }
        });
        // 循环所有文件
        for (File file : dirfiles) {
            // 如果是目录 则继续扫描
            if (file.isDirectory()) {
                findAndAddClassesInPackageByFile(basePackage + "." + file.getName(), file.getAbsolutePath(), recursive, classes);
            } else {
                // 如果是java类文件 去掉后面的.class 只留下类名
                String className = file.getName().substring(0, file.getName().length() - 6);
                try {
                    // 添加到集合中去
                    classes.add(Class.forName(basePackage + '.' + className));
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    展开全文
  • 还有就是通过java运行class文件后,编译器还在起作用吗,因为今天看的书上说class文件在运行的时候编译器会扫描字节码
  • 模式扫描字节模式扫描器 描述 简单的字节模式扫描器。 可用于在内存区域中查找特定系列的操作
  • 定制协议600元一份。 该定制说明: //配置:数据排列:4纵向从左到右从上到下 下高位(逆向),...09 (发送总字节) C4 E3 BA C3 20 31 20 D2 BB (汉字 GB_2312 的字符集,其他为ASCII,按发送的顺序排列) C...

    定制协议600元一份。

     

     

    该定制说明:

    //配置:数据排列:4纵向从左到右从上到下 下高位(逆向),宽:16,高:16,[Font: Name=宋体, Size=12, Units=3, GdiCharSet=1, GdiVerticalFont=False],文字横向偏移:-3,文字纵向偏移:0 

    这是标题发送协议
    61 62 (协议)
    09 (发送总字节)
    C4 E3 BA C3 20 31 20 D2 BB (汉字 GB_2312 的字符集,其他为ASCII,按发送的顺序排列)
    C4 E3 (汉字 GB_2312 )
    00 (间隔)
    40 20 F8 07 40 20 18 0F 08 C8 08 08 28 18 00 00 00 00 FF 00 00 08 04 43 80 7F 00 01 06 0C 00 00 (模型)
    BA C3 (汉字 GB_2312 )
    00 (间隔)
    10 10 F0 1F 10 F0 80 82 82 82 E2 92 8A C6 80 00 40 22 15 08 14 63 00 00 40 80 7F 00 00 00 00 00 
    D2 BB (汉字 GB_2312 )
    00 (间隔)
    80 80 80 80 80 80 80 80 80 80 80 80 80 C0 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

    54 31 +型号的ASCII码
    比如发送机器号“DJ 315”,54 32 44 4A  33 31 35

    54 32 + 机器号的ASCII码

    这个宋体16.dot样式有点细微差异。

    展开全文
  • 键盘扫描码(实用于标准PC的101、102和104 键的键盘),按下发送通,弹起发送断码。 说明: 第一类按键,通为1字节,断码为 0xF0+通 形式。如A键,其通为 0x1C,断码为 0xF0 0x1C,第二类按键,通为2...

     键盘扫描码(实用于标准PC的101、102和104 键的键盘),按下发送通码,弹起发送断码。

      

    说明:

    第一类按键,通码为1字节,断码为 0xF0+通码 形式。如A键,其通码为 0x1C,断码为 0xF0 0x1C,
    第二类按键,通码为2字节 0xE0+0x?? 形式,断码为 0xE0+0xF0+0x?? 形式。如 right ctrl键,其通码为 0xE0 0x14,断码为 0xE0 0xF0 0x14。
    第三类特殊按键有两个,print screen键通码为 0xE0 0x12 0xE0 0x7C,断码为 0xE0 0xF0 0x7C 0xE0 0xF0 0x12; pause键通码为 0xEl 0x14 0x77 0xEl 0xF0 0x14 0xF0 0x77,断码为空。

    附1:Windows 多媒体扫描码

      

    附2:ACPI 扫描码

      

     

    转载于:https://www.cnblogs.com/xiii/p/9182425.html

    展开全文
  • APM agent 修改字节码机制

    千次阅读 2017-01-11 14:36:44
    Tomcat plugin为例,TomcatPlugin实现了ProfilerPlugin接口,在APM agent启动时,已经通过扫描插件目录并注入了TomcatPlugin实例到plugin context里。随后,在classloader加载一个class时,javaagent机制会调用...

          Tomcat plugin为例,TomcatPlugin实现了ProfilerPlugin接口,在APM agent启动时,已经通过扫描插件目录并注入了TomcatPlugin实例到plugin context里。随后,在classloader加载一个class时,javaagent机制会调用instrumentation里的ClassFileTransformer对象的transform方法来修改字节码,APM agent启动时向instrumentation中放了一个ClassFileTransformerDispatcher,这个对象的transform方法里根据当前加载的类的全限名选择对应的插件来修改字节码。

    APM对修改字节码的过程中获取到的类、方法,以及添加拦截器都做了包装,以便方便的添加拦截器。

    public class TomcatPlugin implements ProfilerPlugin, TransformTemplateAware {
    
    @Override
     public void setup(ProfilerPluginSetupContext context) {// plugin接口
       addRequestEditor();// 修改字节码
    }
    private void addRequestEditor() {
    
    // 这个名字不贴切,实际上只是注册了一个修改字节码的类到transformContext里 
    
    // 第一个参数是目标类,第二个参数是具体修改实现
       transformTemplate.transform("org.apache.catalina.connector.Request", new TransformCallback() {
             @Override
             public byte[] doInTransform(Instrumentor instrumentor, ClassLoader classLoader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws InstrumentException {
                 InstrumentClass target = instrumentor.getInstrumentClass(classLoader, className, classfileBuffer);
                 target.addField(TomcatConstants.TRACE_ACCESSOR);
                 target.addField(TomcatConstants.ASYNC_ACCESSOR);
    
                 // clear request.// 修改特定的方法
             InstrumentMethod recycleMethodEditorBuilder = target.getDeclaredMethod("recycle");
             if (recycleMethodEditorBuilder != null) {
                     recycleMethodEditorBuilder.addInterceptor("com.navercorp.APM.plugin.tomcat.interceptor.RequestRecycleInterceptor");
                 }
                 // trace asynchronous process.
             InstrumentMethod startAsyncMethodEditor = target.getDeclaredMethod("startAsync", "javax.servlet.ServletRequest", "javax.servlet.ServletResponse");
             if (startAsyncMethodEditor != null) {
              startAsyncMethodEditor.addInterceptor("com.navercorp.APM.plugin.tomcat.interceptor.RequestStartAsyncInterceptor");
                 }
                 return target.toBytecode();
             }
         });
     } 
    展开全文
  • 需求:读取扫描设备扫到的数据...实现:了解扫设备——Java实现串口通信并读取和解析字节流数据——请求同步接口同步数据——可视化图形界面操作——打包成可执行程序——编写启动脚本——编写软件使用说明文档 ...
  • ASCII表与扫描码表

    2020-11-01 18:10:58
    ASCII表: 扫描码对照表: (注:当按下“普通键”时,它的低8位数存放该字符的...高8位字节存放该键的扫描码。) 扫描码 键 0x011b ESC 0x3b00 F1 0x3c00 F2 0x3d00 F3 0x3e00 F4 0x3f00 F5 0x4000 F6 0x4100...
  • 扫描程序→获取源代码(几号形式)→语法分析(定义程序结构元素及其关系)→绘制语法树。 语义分析: 分析静态语义(声明和类型检查)→添加额外信息(“注释”或“装饰”到语法树,属性添加到符号表)。 代码...
  • 要想实现FINDBUGS静态扫描器,如果不熟悉java字节码,是很难写出比较复杂的检测器的。只有对这些指令熟悉了,才能更加容易的分析源代码。看着这些指令,让我们回想起了大学时期的汇编语言。回想起来大学孤灯夜读的...
  • 一、抽象语法树简介 抽象语法树(Abstract Syntax Tree)是源代码的抽象语法结构的树状表示。...进一步剥开来,广义的解析器里一般会有扫描器(scanner,也叫tokenizer或者lexical analyzer,词法分析...
  • 但是这个插件打印条形的效果不行,用手机扫描或者条码枪都很难识别出来,而且不支持插入特殊字符,我的处理方式可以看另一篇文章()。 痛点还是打印出来条形的效果不行,所以改用Bartender打印,研究了很长时间...
  • 2. 系统启动时,通过Spring扫描有包含注解:@ServiceType的接口,然后通过ASM类库修改接口字节码   3. 用到一些辅助工具:java命令,asm-util.jar,asm.jar ==================================================...
  • 易语言扫描病毒取特征源码,扫描病毒取特征,loading,检测壳子,取病毒名,Virus_signature,汇编_取字节集长度,读共享,读字节集,取空白字节集_,ASM_MD5,返回字符串到MD5文本,RtlMoveMemory_IMAGE_DOS_HEADER_1,...
  • PS2键盘第二套键盘扫描码学习发现

    千次阅读 2018-07-22 21:15:16
    PS2键盘中第二套键盘扫描码使用最广泛。但是每个按键的键值,大多数是一个字节。 有少量的两个字节:  小键盘ENTER 键 E0 5A  右CTRL E0 14  右GUI E0 27  左GUI E0 1f  右ALT ...
  • 要读取QR图像,您将需要一个QR扫描仪或许多可以使用手机摄像头扫描QR的应用程序。 下面是在Win 7计算机上运行的应用程序的典型屏幕。 #如何使用应用程序(.jar)/(运行二进制文件) 运行该应用程序需要JRE 1.8...
  • Cheat Engine 字节数组类型

    千次阅读 2018-07-04 23:33:32
    BIG5 编码:... 打开游戏 准备修改名字 查找BIG5 藤 吉 ...开始扫描 使用字节数组类型扫描 新BIG5 替换BIG5 逐个替换,查找真正的地址 修改成功 ...
  • Autojar-开源

    2021-04-22 16:09:53
    Autojar通过不同的输入(例如自己的类或外部档案)创建最小大小的jar文件。 它以递归方式扫描字节码以查找对其他类的引用,从档案中提取这些引用,然后将其复制到输出中。
  • sonar扫描处理lombok问题

    千次阅读 2019-11-20 12:26:08
    lombok是一个字节码增强工具,通过在编译期修改java class字节码实现简化代码的目的。所以默认情况sonar会将使用lombok @Data等注解的类识别为 代码坏味道 。SonarJava是sonar默认提供的Java语言分析器。SonarJava...
  • 静态代码扫描

    2017-12-15 10:20:38
    【程序静态分析(Program Static Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性...分析字节码一般来说无法发现跨文件的
  • java通过反射的类扫描工具类,通过反射找到类的字节码, package com.csnt.scdp.bizmodules.modules.util; import java.io.File; import java.io.IOException; import java.net.JarURLConnection; import ...
  • class文件扫描分析

    2021-05-26 16:52:35
    最近项目中需要分析java文件中依赖的类,通过提取字节码文件中的Constant_Class_info 常量池中的信息实现class 文件依赖分析。使用了ASM 轻量级jar包读取字节码文件,再解析常量池信息。 <dependency> <...
  • java高级特性:反射

    2019-08-26 09:24:35
    比如说,有一段程序已经写好了,其他的程序是后写的,从原则上来讲不可能调用后写的东西,用传统的方法是调用不到的,但是还有一个方法就是在运行的时候扫描字节码,我们知道字节码对类来讲有属性和方法,它...
  • NTscan变态扫描

    2018-04-19 09:23:38
    ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:"-l[空格]数据包大小";"-n发送数据次数";"-t"指一直ping。 ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping) ...
  • 准备工作由于FindBugs是分析编译后的class文件,也就是字节码文件。我们需要了解FindBugs底层的处理机制。根据FindBugs官网文档描述,FindBugs使用了BCEL来分析Java字节码文件。从1.1版本开始,FindBugs也支持使用...
  • compileall模块查找Python源文件,并把它们编译为字节码表示,将结果保存在.pyc文件中。 16.11.1 编译一个目录 compile_dir()用于递归扫描一个目录,并对其中的文件完成字节编译。 import compileall import glob ...
  • spring bean生命周期

    2020-11-05 20:52:59
    为什么下图的beanClass是 Object类型 而不是类具体的类型 :因为spring 通过Asm技术扫描字节码文件的时候beanclass只是个全限定名的字符串换在jvm中还没有这个klass对象 @value("#{aaa}") 取beanName为aaa...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 425
精华内容 170
关键字:

扫描字节码