ASM

Java 动态代理的原理

半世苍凉 提交于 2020-10-29 11:26:58
做开发的都知道,编程语言可以从运行时还是编译时检查分为动态类型和静态类型。对于Java来说,通常认为它是静态的强类型语言,但是因为Java提供反射的机制,也具备了部分动态类型语言的能力。这一节,我们就讲一讲Java的动态代理。 动态代理是一种用于运行时动态构建代理,动态处理代理方法调用的机制。它首先是一种机制。在设计模式中有一种模式叫做代理模式(Proxy Pattern),和动态代理类似,其中代理可以看作是对调用目标的一个包装,通过代理完成对目标对象的调用。这其实也是一种解耦。 实现动态代理的机制有很多,比如JDK自身提供的动态代理JDK Proxy(利用Java语言的反射机制),其他方式有ASM,CGLIB<基于ASM>,Javassit等。动态代理机制主要应用有面向切面AOP、拦截器、RPC调用、日志、事务等等。 我们先来探究JDK Proxy机制<基于反射>----通过接口。新版本也开始结合ASM机制。它涉及到最重要的类和接口就是Proxy和InvocationHandler。先熟悉他们一下。 Proxy这个类的作用就是用来动态创建一个代理对象的类,它最常用到的方法是newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) InvocationHandler接口只有一个方法

新零售时代,我们如何提升线下业务的终端可用性?

谁说胖子不能爱 提交于 2020-10-29 00:59:01
作者|陈聪(有马) 出品|阿里巴巴新零售淘系技术部 导读:在新零售时代,如何提升线下业务的可用性是一个极其重要的命题,本文从阿里巴巴未来酒店:Flyzoo Hotel 项目出发,介绍了在过程中对这个命题的通用思考,与具体落地的解决方案。 在阿里未来酒店项目中,笔者首次接触了不少线下业务,因为业务的需要,其中大部分是由线下( Android )设备来达成的,如 CheckIn 与 CheckIn 设备,电梯与梯控设备,客房门与门控设备,早餐与早餐核销设备等。 在提高业务可用性的问题上,经历手淘多年的发展,虽然积累了大量可供选择的高可用中间件,但对于酒店这类线下为主的业务,由于线下相比线上,在业务形态与设备环境上有着较大的不同,自然会影响到解题的思路,以及解法的 trade-off ,进而会推演出不同的思路与方案。 本文主要介绍对于线下设备可用性方向上的思考,以及基于此而落地的框架与解法,希望能达到一定的抛砖引玉的效果。 01 当我们谈论线下可用性的时,在讨论什么 线下业务中,对于那部分以线下设备为核心的业务而言,提高业务可用性的核心是提高设备可用性,更确切而言,是减少设备对用户可感知的,业务功能不可用的时长。 而如何提升的方向,可从线下业务与技术相比线上的不同来着手分析。 1.1 业务上的不同思考 在业务上,线下相比线上主要有如下3个不同点: 1. 设备专一业务、业务专一功能 即

VS2013的x86汇编语言开发环境配置

℡╲_俬逩灬. 提交于 2020-10-29 00:47:25
转载: https://blog.csdn.net/infoworld/article/details/45085415 转载: https://blog.csdn.net/u014792304/article/details/53373430 转载: https://www.cnblogs.com/sunylat/p/6242141.html 转载: https://www.cnblogs.com/del/archive/2010/04/03/1703689.html 转载: https://www.cnblogs.com/iBinary/p/7508144.html (基本概念介绍) 转载: https://arthurchiao.github.io/blog/x86-asm-guide-trans-cn-zh/ (翻译国外一篇文章) 转载: http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html (入门教程) 使用vs编译x86汇编语言无需安装MASM,因为所有的vs版本都集成了MASM12.0(All versions of Visual Studio include the Microsoft Assembler (MASM) version 12.0.)。 其安装目录(C:\Program

新零售时代,我们如何提升线下业务的终端可用性?

一世执手 提交于 2020-10-29 00:33:24
作者|陈聪(有马) 出品|阿里巴巴新零售淘系技术部 导读:在新零售时代,如何提升线下业务的可用性是一个极其重要的命题,本文从阿里巴巴未来酒店:Flyzoo Hotel 项目出发,介绍了在过程中对这个命题的通用思考,与具体落地的解决方案。 在阿里未来酒店项目中,笔者首次接触了不少线下业务,因为业务的需要,其中大部分是由线下( Android )设备来达成的,如 CheckIn 与 CheckIn 设备,电梯与梯控设备,客房门与门控设备,早餐与早餐核销设备等。 在提高业务可用性的问题上,经历手淘多年的发展,虽然积累了大量可供选择的高可用中间件,但对于酒店这类线下为主的业务,由于线下相比线上,在业务形态与设备环境上有着较大的不同,自然会影响到解题的思路,以及解法的 trade-off ,进而会推演出不同的思路与方案。 本文主要介绍对于线下设备可用性方向上的思考,以及基于此而落地的框架与解法,希望能达到一定的抛砖引玉的效果。 01 当我们谈论线下可用性的时,在讨论什么 线下业务中,对于那部分以线下设备为核心的业务而言,提高业务可用性的核心是提高设备可用性,更确切而言,是减少设备对用户可感知的,业务功能不可用的时长。 而如何提升的方向,可从线下业务与技术相比线上的不同来着手分析。 1.1 业务上的不同思考 在业务上,线下相比线上主要有如下3个不同点: 1. 设备专一业务、业务专一功能 即

汇编语言环境dos,win32及win64

霸气de小男生 提交于 2020-10-28 18:31:53
win一、计算2^12保存在AX中(王爽汇编语言第二版p100): mov cx,12 ;循环12次 mov ax,1 ;初始化AX s: add ax,ax loop s ;执行完loop后,要显示的数字2^12 已经在寄存器AX 二、AX寄存器以显示说明: 本例中,2^12= 4096,故 AX= 1000H 则输出字符为 4096 。 原理: ax为十六位寄存器,所以输出十进制数范围为0 - 65535,最大五位数,故设置CX=5,LOOP语句实现算法: 4096/10000= 商0 余数 4096 ; 根据十进制书写习惯,不输出前面的0字符 ,需要在输出循环里判断 4096/1000= 商4 余数96 ;输出4 96/100= 商0 余数96 ;输出0 96 /10= 商9 余数6 ;输出9 6 /1= 商6 余数0 ;输出6 把每次所得商加上48即可得到相应数字的ASCII码, 三、完整代码: code segment assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax mov cx,12 ;循环12次 mov ax,1 ;初始化AX s: add ax,ax loop s ;执行完loop后,要显示的数字2^12 已经在寄存器AX mov si, offset divisors mov di,

Linux用户空间与内核空间(理解高端内存)

空扰寡人 提交于 2020-10-28 10:38:12
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。 Linux内核地址映射模型 x86 CPU 采用了段页式地址映射模型。 进程代码 中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。 段页式机制如下图。 Linux内核地址空间划分 通常 32位Linux内核 地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。 Linux内核高端内存的由来 当内核模块代码或线程访问内存时,代码中的内存地址都为逻辑地址,而对应到真正的物理内存地址,需要地址 一对一 的映射,如逻辑地址0xc0000003对应的物理地址为0×3,0xc0000004对应的物理地址为0×4,… …,逻辑地址与物理地址对应的关系为 物理地址 = 逻辑地址 – 0xC0000000 逻辑地址 物理内存地址 0xc0000000 0×0 0xc0000001 0×1 0xc0000002 0×2 0xc0000003 0×3 … … 0xe0000000 0×20000000 … … 0xffffffff 0×40000000 ?? 假 设按照上述简单的地址映射关系

Linux用户空间与内核地址空间

六月ゝ 毕业季﹏ 提交于 2020-10-28 09:29:02
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。 Linux内核地址映射模型 x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。 段页式机制如下图。 Linux内核地址空间划分 通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。 Linux内核高端内存的由来 当内核模块代码或线程访问内存时,代码中的内存地址都为逻辑地址,而对应到真正的物理内存地址,需要地址一对一的映射,如逻辑地址0xc0000003对应的物理地址为0×3,0xc0000004对应的物理地址为0×4,… …,逻辑地址与物理地址对应的关系为 物理地址 = 逻辑地址 – 0xC0000000 逻辑地址 物理内存地址 0xc0000000 0×0 0xc0000001 0×1 0xc0000002 0×2 0xc0000003 0×3 … … 0xe0000000 0×20000000 … … 0xffffffff 0×40000000 ?? 假 设按照上述简单的地址映射关系

C++ 获取系统版本号

拜拜、爱过 提交于 2020-10-28 04:53:24
因用到系统版本号,区别对待。 // 5.0 Windows 2000"; // 5.1 Windows XP"; // 5.2 Windows 2003"; // 6.0 Windows Vista"; // 6.1 Windows 7"; // 6.2 Windows 8"; // 6.3 Windows 8.1"; // 10.0 Windows 10"; //其他版本 方法1: 此方法是测下来 XP、win7、win10都通过的方法。 DWORD Major,Minor,Build; void GetOSVersion1() { _asm { pushad mov ebx, fs:[ 0x18 ]; get self pointer from TEB mov eax, fs:[ 0x30 ]; get pointer to PEB / database mov ebx, [eax + 0A8h]; get OSMinorVersion mov eax, [eax + 0A4h]; get OSMajorVersion mov Minor, ebx mov Major, eax popad } Build = 0 ; } 方法2: DWORD Major,Minor,Build; typedef NTSTATUS(WINAPI *

直接在x86硬件上显示图片(无os)

纵饮孤独 提交于 2020-10-25 20:40:14
1 任务   为了学习计算机底层和os,我给自己布置了一个任务:在x86硬件上,使用c和nasm来显示一张bmp图片。完成这个任务,前后估计花了2个月的业余时间。   这个任务涉及了很多知识点,包括:启动区、保护模式、nasm汇编、c和nasm汇编互调、ld链接、硬盘io读取、显卡调色板模式、bmp图片格式、bios中断指令、c指针操作内存、borch虚拟机、binutils工具集、makefile等。 2 环境 ubuntu borchs nasm和 c PS: c代码遵循google的C++ 风格指南,使用gnu99标准 。 3步骤 3.1 生成一个10M的硬盘镜像   bximage是borchs软件包的一个小工具,可以用于生成硬盘或软盘镜像。打开终端,输入:bximage。按照如下图所示的,一步一步地操作。 最终会在当前目录下,生成一个名为10M.img的文件。 3.2 准备一张320*200的bmp图片   为简单起见,屏幕的分辨率使用320*200。因此我们的bmp图片的大小320*200。我准备了一张图片,如下,这是我家主子的靓照。   将文件命名为cat-666.bmp,然后写入到#201扇区 dd if =src/cat-ham.bmp of=10M.img bs=512 seek=201 conv=notrunc 3.3 引导区   引导区位于启动盘的#0扇区

带你认识绕不开的ASLR

拈花ヽ惹草 提交于 2020-10-19 00:59:45
微软从 windows vista/windows server 2008(kernel version 6.0) 开始采用 ASLR 技术,主要目的是为了防止缓冲区溢出 ASLR 技术会使PE文件每次加载到内存的起始地址随机变化,并且进程的栈和堆的起始地址也会随机改变。 ASLR(Address space layout randomization) 是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。据研究表明 ASLR 可以有效的降低缓冲区溢出攻击的成功率,如今 Linux、FreeBSD、MacOS、Windows 等主流操作系统都已采用了该技术。 一、主要特点 1、 映像随机化 经典的方法是用注册表项 HKLM\SYSTEM\CurrentControlSet\Session Manager\Memory Management 的方法对映像随机化禁用 设置为0 禁用 ,-1强制对可随机化的映像进行处理,其他值正常工作; 各模块的低位2位不变; 只是对加载基址的前2个字节做了随机处理; 2、堆栈随机化 XP 下不具备, VISTA 具备,每次获取堆地址不同; 不需要精确跳转的,溢出手段影响有限; 3、 PEB TEB 随机化 XP SP2 中已经引入了