首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

JVM 《八 JVM JDK代理&CGLib 代理解析》

前言&背景 现在Spring 什么的好火。 Spring 很经典的一个特性是AOP AOP 的基础是代理。 代理分为静态代理、动态代理。 静态代理,不好处挺明显的,工程中各式各样的代理代码,过于冗余。 动态代理显得就简洁多了。 动态代理在java中现在大约有这么两种技术。JDK 原生反射,字节码操作增强反射(我第一次学到这个的时候感觉特别特别高大上,虽然现在也这么感觉 然后字节码操作技术 比较火的就是ASM了,也就是CGLib所使用的技术。 至于啥是代理,就不多解释了。就是产生一个代理操作来替代原核心操作并且增加一些便利的具有各个场景特性的附加操作。 然后JDK&CGLib表象上或者语法上的区别,一个面向接口、一个面向类、Spring 根据情况使用也可强制。然后单独使用的时候写法儿上的不同。 那在JVM层面去看待这个问题是怎样的呢? 其实本质要讨论的就是Java 反射、字节码操作具体是怎么样的,有什么区别。 先说一个反射的总体概念 反射,顾名思义 反着射,跟常规编写、编译、解释执行不同。我当时看反射的时候挺蒙蔽的,反射?反?射?到系统的看编程思想的RTTI那一块,对于反射的定义还有这个名字多少有点认可了。 下面是百度的解释,感觉挺糟糕的 也就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 一个比较可取的解释 Instances of the class Class represent classes and interfaces in a running Java application. An enum is a kind of class and an annotation is a kind of interface. Every array also belongs to a class that is reflected as a Class object that is shared by all arrays with the same element type and number of dimensions The primitive Java types (boolean, byte, char, short, int, long, float, anddouble), and the keyword void are also represented as Class objects. 综合起来看,也就是运行期间根据名称去动态的加载及使用一个编译期未知的类,然后根据加载进来的Class对象,来调用该类具体的方法的行为。(静态加载、根据已知信息直接使用) 为什么是反着呢,因为我们常规写程序都是既定使用的类&方法然后import、然后加载产生Class对象&使用类的具体信息 驱动执行。(已知信息使用) 而反射是在运行时除了名称完全未知,通过名称获取&加载进来,然后产生Class对象,通过Class 对象的信息来获取调用这个类具体的内容。(动态加载、透过 Class 获取信息去调用) 当然,这个类通常是远程调用或者别的什么方式来获取使用的。 Java反射也就是上面说的常规过程,来加载&使用一个完全未知的类。 而且JDK代理有个特点,是针对接口来实现的,也就是面向接口来编程,这也就导致了 接口一致而非对象一致。并且Java 反射效率总体来说是比较低下。 为了解决这些个问题,ASM之类的字节码操作技术出现了。

01

C#反射

Reflection,中文翻译为反射。         这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型 (class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息,例如:         Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。 Type类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。 MethodInfo包含方法的信息,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。 诸如此类,还有FieldInfo、EventInfo等等,这些类都包含在System.Reflection命名空间下。

02

WMI-Win32_VideoController 显卡参数

AcceleratorCapabilities --图形和视频控制器的三维阵列的能力 AdapterCompatibility --用于此控制器与系统比较兼容性一般芯片组 AdapterDACType --姓名或数字 - 模拟转换器(DAC)芯片的标识符 AdapterRAM --视频适配器的内存大小 Availability --可用性和设备的状态 CapabilityDescriptions --自由形式字符串提供更详细的解释中的任何加速器能力阵列所指示的视频加速器功能 Caption --对象的简短描述 ColorTableEntries --尺寸系统的色表 ConfigManagerErrorCode --Win32的配置管理器错误代码 ConfigManagerUserConfig --如果为TRUE,该装置是使用用户定义的配置 CreationClassName --第一个具体类的名称出现在创建实例所使用的继承链 CurrentBitsPerPixel --使用的比特数以显示每个像素 CurrentHorizontalResolution --水平像素的当前数量 CurrentNumberOfColors --在当前的分辨率支持的色彩数目 CurrentNumberOfColumns --此视频控制器列(如果在字符模式下)编号 CurrentNumberOfRows --此视频控制器行(如果在字符模式下)编号 CurrentRefreshRate --频率在该视频控制器刷新监视器的图像 CurrentScanMode --当前扫描模式 CurrentVerticalResolution --当前垂直像素数量 Description --描述 DeviceID --该视频控制器标识符(唯一的计算机系统) DeviceSpecificPens --目前许多设备专用笔。值0xFFFF表示设备不支持笔。 DitherType --抖动型视频控制器 DriverDate --当前已安装的视频驱动程序的最后修改日期和时间 DriverVersion --视频驱动程序的版本号 ErrorCleared --如果为真,报上一个错误代码属性中的错误现已清除 ErrorDescription --可能采取的纠正措施字符串提供有关记录在一个错误代码属性错误的详细信息 ICMIntent --应使用默认三种可能的配色方法或意图中的一个特定值 ICMMethod --处理ICM方法。对于非ICM的应用程序,这个属性决定了ICM是否已启用对于ICM的应用程序,系统将检查此属性来确定如何处理ICM支持 InfFilename --视频适配器的路径.inf文件 InfSection --Windows的视频信息所在的.inf文件 InstallDate --安装的日期 InstalledDisplayDrivers --已安装的显示设备驱动程序的名称 LastErrorCode --报告的逻辑设备上一个错误代码 MaxMemorySupported --以字节为单位支持的内存最高限额 MaxNumberControlled --可支持通过该控制器可直接寻址的实体的最大数量 MaxRefreshRate --在赫兹视频控制器的最大刷新率 MinRefreshRate --在赫兹视频控制器的最小刷新率 Monochrome --如果是TRUE,灰阶用于显示图像。 Name --标签由该对象是已知的。当子类,该属性可以被覆盖是一个关键属性。 NumberOfColorPlanes --当前一些颜色平面。如果该值不适用于当前视频的配置,输入0(零) NumberOfVideoPages --当前的分辨率和可用内存支持视频页数 PNPDeviceID --即插即用逻辑设备的播放装置识别符 PowerManagementCapabilities --逻辑设备的特定功率相关的能力阵列 PowerManagementSupported --如果为TRUE,该装置可以是电源管理(可以投入挂起模式,等等) ProtocolSupported --由控制器使用协议访问“控制”的设备 ReservedSystemPaletteEntries --系统调色板保留的条目数 SpecificationVersion --初始化数据规范的版本号(在其上的结构的基础) Status --对象的当前状态 StatusInfo --对象的当前状态详细信息 SystemCreationClassName --该作用域计算机的创建类别名称属性的值 SystemName --系统

01

WMI-Win32_baseboard 主板参数

Caption --简述 ConfigOptions --数组,表示位于在底板上跳线和开关的配置。 CreationClassName --表示类的名称(就是Win32_baseboard类) Depth --以英寸为单位的物理封装。 Description --对象的描述(底板) Height --用英寸表示的物理包的高度 HostingBoard --如果为TRUE,该卡是一个主板,或在一个机箱中的基板。 HotSwappable --如果为TRUE,就是支持热插拔(判断是否支持热插拔) InstallDate --日期和时间对象安装。此属性不需要的值以表示已安装的对象。 Manufacturer --表示制造商的名称 Model --物理元素的名称是已知。 Name --对象的名称标签 OtherIdentifyingInfo --捕获附加数据,超出资产标签的信息,可以用来标识物理元件 PartNumber --由负责生产或制造的物理元素的组织分配部件编号。 PoweredOn --如果为真,物理元素处于开机状态。 Product --产品的型号 Removable --判断是否可拆卸的 Replaceable --判断是否可更换的 RequirementsDescription --自由格式字符串描述方式,这张卡是身体不同于其他卡。该属性才有意义时,相对应的布尔值属性特殊要求是集真的 RequiresDaughterBoard --如果是TRUE,至少一个子板或辅助卡才能正常工作。 SerialNumber --制造商分配的用于识别所述物理元件数目。 SKU --库存的物理单元号。 SlotLayout --描述插槽位置 SpecialRequirements --如果为真,此卡是同类型的其他卡物理上唯一的,因此需要一个专门的插槽 Status --对象的当前状态。 Tag --符系统的基板唯一标识 Version --物理元素的版本 Weight --物理元素的重量英镑表示 Width --用英寸表示的物理元素的宽度

02

ATT&CK视角下的红蓝对抗之Windows访问控制模型

访问控制模型(Access Control Model)是指Windows操作系统关于安全性的一个概念,由访问令牌和安全描述符两部分构成,其中访问令牌是指由当前登录的Windows账号的用户持有,其中会包含了该账号的基础信息,包括用户帐户的标识和特权信息,安全描述符由要访问的对象持有,里面会包含当前对象的安全信息。假设当用户登录时,操作系统会对用户的帐户名和密码进行身份验证, 当登录成功时,系统会自动分配访问令牌(Access Token),访问令牌包含安全标识符,用于标识用户的帐户以及该用户所属的任何组帐户,当我们去创建一个进程也就是访问一个资源(进程资源)的时候,Access Token会被复制一份给进程,进程通过它的创建者所给它设置的安全描述符中的ACL来判断我们是否可以去访问,是否有权限去执行某步操作。

01
领券