ASM

ASM 系列详细教程-04-ASM interface and components 接口和组件

本秂侑毒 提交于 2019-12-23 02:22:23
接口和组件 介绍 用于生成和转换已编译类的ASM API基于ClassVisitor抽象类(请参见图2.4)。 此类中的每个方法都对应于同名的类文件结构部分(请参见图2.1)。 通过单个方法调用可以访问简单部分,该方法的参数描述其内容,并返回void。 可以通过返回辅助访问者类的初始方法调用来访问其内容可以具有任意长度和复杂度的节。 visitAnnotation,visitField和visitMethod方法就是这种情况,它们分别返回AnnotationVisitor,FieldVisitor和MethodVisitor。 这些辅助类递归使用相同的原理。 例如,FieldVisitor抽象类中的每个方法(请参见图2.5)对应于具有相同名称的类文件子结构,visitAnnotation 也是如此。 接口简介 Figure 2.4.: The ClassVisitor class public abstract class ClassVisitor { public ClassVisitor ( int api ) ; public ClassVisitor ( int api , ClassVisitor cv ) ; public void visit ( int version , int access , String name , String signature ,

https学习笔记三----OpenSSL生成root CA及签发证书

…衆ロ難τιáo~ 提交于 2019-12-22 17:14:12
在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的。这一章,主要介绍下如何使用openssl库来创建key file,以及生成root CA及签发子证书。学习主要参考官方文档:https://www.feistyduck.com/library/openssl-cookbook/online/ch-openssl.html# 一、openssl 简介 openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。官网: https://www.openssl.org/source/ ,其中有3个主要的用途:1、密码算法库(建立 RSA、DH、DSA key 参数,计算消息摘要,使用各种 Cipher加密/解密) 2、密钥和证书封装管理功能(建立 X.509 证书、证书签名请求(CSR)和CRLs(证书回收列表));3、SSL通信API接口(SSL/TLS 客户端以及服务器的测试,处理S/MIME 或者加密邮件)。 二、安装openssl(linux CentOS7 32位) 如果使用的是unix操作系统,可能安装系统的时候,这个库就已经有且存在了。但是在使用前,需要注意下当前openssl的库的版本 。 openssl version OpenSSL

Instrument API介绍

时光怂恿深爱的人放手 提交于 2019-12-21 18:56:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. Instrumentation介绍   JVMTI (JVM Tool Interface)是 Java 虚拟机所提供的 native 编程接口,是 JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface)的更新版本。JVMTI 提供了一套“代理”程序机制,可以支持第三方工具程序以代理的方式连接和访问 JVM,并利用 JVMTI 提供的丰富的编程接口,完成很多跟 JVM 相关的功能。  Agent 即 JVMTI 的客户端,它和执行 Java 程序的虚拟机运行在同一个进程上。他们通常由另一个独立的进程控制,充当这个独立进程和当前虚拟机之间的中介,通过调用 JVMTI 提供的接口和虚拟机交互,负责获取并返回当前虚拟机的状态或者转发控制命令。java.lang.instrument 包的实现,也是基于这种机制的。在 Instrumentation 的实现当中,存在一个 JVMTI 的代理程序,通过调用 JVMTI 当中于 Java 类相关的函数来完成Java 类的动态操作。  利用 java.lang.instrument 做动态 Instrumentation 是 Java SE 5

WIN10下运行汇编语言编写的Hello World

对着背影说爱祢 提交于 2019-12-20 13:48:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我们在这里需要DOSBox软件,这里提供MASM和DOSBox下载链接: MASM:https://pan.baidu.com/s/1T-UAPk57iNL-NtvSj-IShA 提取码g3y1 DOSBox:https://pan.baidu.com/s/1wxr9HN51jFqEtYaUcZFIdA 提取码g2fx 下载好了第一个文件会看到里面有debug.exe,LINK.EXE,MASM.EXE三个程序,我们需要把它们和我们写好的hello.asm(用txt创建后改名为hello.asm)文件放在一个文件夹下面,假设这里放在了D盘的MASM文件夹下。 assume cs:code,ds:datas datas segment str db 'helloWorld!','$' datas ends code segment mov ax,datas mov ds,ax lea dx,str ; 获取str的偏移地址 mov ah,9 ; 调用9号功能输出字符串 int 21h mov ah,4ch int 21h code ends end 下载好第二个文件发现里面有DOSBox…的程序,点击正常安装完就好。安装完成后打开桌面上的DOSBox0.74 我们来到红色圈圈包起来的路径下C:\Users\hp

u-boot 之配置分析 (2)

醉酒当歌 提交于 2019-12-19 07:54:09
Makefile简要分析 所有这些目录的编译连接都是由顶层目录的makefile来确定的。 1. 在makefile中有: unconfig: @rm -f $(obj)include/config.h $(obj)include/config.mk \ $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp %是个通配符,make xxx_config都是这个目标.目标的依赖是unconfig, unconfig 的命令是删除一些文件,而这些文正是从make xxx_config过程中产生的.unconfig就是清理配置的. MKCONFIG := $(SRCTREE)/mkconfig 100ask24x0_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0           等同为 ./mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0 $@就是指目标 $(@:_config=)是变量的替换引用 格式为“$(VAR:A=B)”(或者“${VAR:A=B}”),意思是:替换变量“VAR”中所有“A”字符结尾的字为“B”结尾的字。 2.

U-Boot编译过程完全分析

妖精的绣舞 提交于 2019-12-18 10:50:22
本文转载于:http://www.cnblogs.com/heaad/archive/2010/07/17/1779806.html 2.1 U-Boot Makefile分析 2.1.1 U-Boot编译命令 对于mini2440开发板,编译U-Boot需要执行如下的命令: $ make mini2440_config $ make all 使用上面的命令编译U-Boot,编译生成的所有文件都保存在源代码目录中。为了保持源代码目录的干净,可以使用如下命令将编译生成的文件输出到一个外部目录,而不是在源代码目录中,下面的2种方法都将编译生成的文件输出到 /tmp/build目录: $ export BUILD_DIR=/tmp/build $ make mini2440_config $ make all 或 $ make O=/tmp/build mini2440_config (注意是字母O,而不是数字0) $ make all 为了简化分析过程,方便读者理解,这里主要针对第一种编译方式(目标输出到源代码所在目录)进行分析。 2.1.2 U-Boot配置、编译、连接过程 U-Boot开头有一些跟主机软硬件环境相关的代码,在每次执行make命令时这些代码都被执行一次。 1. U-Boot 配置过程 ( 1 )定义主机系统架构 HOSTARCH := $(shell uname -m

JVM性能优化--字节码技术

杀马特。学长 韩版系。学妹 提交于 2019-12-18 09:11:32
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、字节码技术应用场景 AOP技术、Lombok去除重复代码插件、动态修改class文件等 二、字节技术优势 Java字节码增强指的是在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修改。Java字节码增强主要是为了减少冗余代码,提高性能等。 实现字节码增强的主要步骤为: 1、修改字节码 在内存中获取到原来的字节码,然后通过一些工具(如 ASM,Javaasist)来修改它的byte[]数组,得到一个新的byte数组。 2、使修改后的字节码生效 有两种方法: 1) 自定义ClassLoader来加载修改后的字节码; 2)替换掉原来的字节码:在JVM加载用户的Class时,拦截,返回修改后的字节码;或者在运行时,使用Instrumentation.redefineClasses方法来替换掉原来的字节码 三、常见的字节码操作类库 1、BCEL Byte Code Engineering Library(BCEL),这是Apache Software Foundation的Jakarta项目的一部分。BCEL是Java classworking 广泛使用的一种框架,它可以让您深入jvm汇编语言进行类库操作的细节。BCEL与javassist有不同的处理字节码方法

设计函数f(f(n))== -n

*爱你&永不变心* 提交于 2019-12-17 21:14:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我上次面试时遇到的一个问题: 设计一个函数 f ,使得: f(f(n)) == -n 其中 n 是一个32位有 符号整数 ; 您不能使用复数算法。 如果您不能为整个数字范围设计这样的函数,请为最大范围设计它。 有任何想法吗? #1楼 x86 asm(AT&T风格): ; input %edi ; output %eax ; clobbered regs: %ecx, %edx f: testl %edi, %edi je .zero movl %edi, %eax movl $1, %ecx movl %edi, %edx andl $1, %eax addl %eax, %eax subl %eax, %ecx xorl %eax, %eax testl %edi, %edi setg %al shrl $31, %edx subl %edx, %eax imull %ecx, %eax subl %eax, %edi movl %edi, %eax imull %ecx, %eax .zero: xorl %eax, %eax ret 检查代码,传递所有可能的32位整数,错误-2147483647(下溢)。 #2楼 该Perl解决方案 适用于整数,浮点数和字符串 。 sub f { my $n =

Oracle数据库高可用之Oracle Restart详细安装图文教程

元气小坏坏 提交于 2019-12-17 14:32:48
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Oracle数据库高可用之Oracle Restart详细安装图文教程 Oracle 作者: startay 时间:2016-06-23 16:27:06 494 0 Oracle Restart是oracle从11g r2开始提供的高可用性单实例数据库,当我们安装完Oracle Restart之后,随着硬件或软件故障或者你的数据库服务器重启,Oracle各种组件也将会自动重启。组件里都包括Database instance、Oracle Net listener、Database services、ASM instance、Oracle ASM disk groups、Oracle Notification Services (ONS)等。 Oracle Restart会周期检查这些组件的健康状态,如果检测到失败的组件,那oracle Restart就将这个组件关闭再重启。Oracle Restart也是借助于Grid Infrastructure(GI)的核心组件Clusterware来提供高可用特性,另外通过standalon server环境又可以使用ASM特性。 那更详细得说一下startup,Oracle Restart确保Oracle组件顺序启动,比如,如果使用了ASM特性

ASM字节码插桩:QQ空间的热修复解决方案核心技术,安卓程序员的硬通货

[亡魂溺海] 提交于 2019-12-17 11:14:27
一、什么是插桩 QQ空间曾经发布的《热修复解决方案》中利用 Javaassist库实现向类的构造函数中插入一段代码解决 CLASS_ISPREVERIFIED 问题。包括了 Instant Run 的实现以及参照 Instant Run 实现的热修复美团Robus等都利用到了插桩技术。 插桩就是将一段代码插入或者替换原本的代码。字节码插桩顾名思义就是在我们编写的源码编译成字节码(Class)后,在Android下生成dex之前修改Class文件,修改或者增强原有代码逻辑的操作。 我们需要查看方法执行耗时,如果每一个方法都需要自己手动去加入这些内容,当不需要时也需要一个个删去相应的代码。 一个、两个方法还好,如果有10个、20个得多麻烦!所以可以利用注解来标记需要插桩的方法,结合编译后操作字节码来帮助我们自动插入,当不需要时关掉插桩即可。 这种AOP思想让我们只需要关注插桩代码本身。 二、字节码操作框架 上面我们提到QQ空间使用了 Javaassist来进行字节码插桩,除了 Javaassist之外还有一个应用更为广泛的 ASM框架同样也是字节码操作框架,Instant Run包括 AspectJ就是借助 ASM来实现各自的功能。 我们非常熟悉的JSON格式数据是基于文本的,我们只需要知道它的规则就能够轻松的生成、修改JSON数据。 同样的Class字节码也有其自己的规则(格式)。