ASM

linux内核配置与编译

扶醉桌前 提交于 2020-01-24 13:52:29
清除临时文件、中间文件和配置文件命令: make clean //remove most generated files but keep the config make mrproper //remove all generated files + config files make distclean //mrproper + remove editor backup and patch files 配置内核命令: make config:基于文本模式的交互式配置。 make menuconfig ARCH=i386:基于文本模式的菜单型配置。//“*”编译成内核(按y)(生成镜像),“m”编译成模块(按m)(生成点o文件),“ ”为不编译(按n) 配置完成之后会在当前文件夹下生成.config文件。 Linux内核提供了一系列可供参考的内核配置文件,位于 ./arch/$cpu/configs 。 编译内核: make zImage//获取详细信息make zImage V=1 make bzImage//获取详细信息make bzImage V=1 区别:在X86平台,zImage只能用于小于512K的内核 编译好的内核文件位于 ./arch/ $ cpu/boot/ (文件名为bzImage)。 编译内核模块: make modules 安装内核模块: make

x86对抗栈回溯检测

社会主义新天地 提交于 2020-01-24 05:40:27
1.原理 函数调用 CALL 指令可拆分为两步操作: 1)、 将调用者的下一条指令( EIP )的地址压栈 2)、 跳转至将要调用的函数地址中(相对偏移或绝对地址) 那么在执行到子函数首地址位置时,返回地址(即调用函数中调用位置下一条指令的地址)就已经存在于堆栈中了,并且是 ESP 指向地址的值。下面通过栈帧的概念,了解编译器在接下来对堆栈进行的操作。 简言之,栈帧就是利用 EBP (栈帧指针,请注意不是 ESP )寄存器访问栈内部局部变量、参数、函数返回地址等的手段。程序运行中, ESP 寄存器的值随时变化,访问栈中函数的局部变量、参数时,若以 ESP 值为基准编写程序会十分困难,并且也很难使 CPU 引用到正确的地址。 所以,调用某函数时,先要把用作基准点(函数起始地址)的 ESP 值保存到 EBP ,并维持在函数内部。这样,无论 ESP 的值如何变化,以 EBP 的值为基准能够安全访问到相关函数的局部变量、参数、返回地址,这就是 EBP 寄存器作为栈帧指针的作用。 在函数体代码的任何位置,EBP 寄存器指向的地址始终存储属于它的调用函数的 EBP 的值,根据这个原理可逐级向调用函数、调用函数的调用函数进行遍历,向上回溯。 这样有什么用呢? 在将属于调用函数的 EBP 的值压栈之前, ESP 指向的地址存储的是由 CALL 指令压栈的调用函数中调用位置的下一条指令的地址(原

测试环境存储磁盘问题,导致RAC一个节点CRS启动失败

感情迁移 提交于 2020-01-20 17:57:20
测试环境存储磁盘问题,导致RAC一个节点CRS启动失败 linux 5.6 *64, 2节点RAC 11.2.0.4 如下,按照日志,说明信息。 主机重启,发现CRS进程并未自动启动完成。a1:/picclife/app/oracle$ crsctl check crs CRS-4638: Oracle High Availability Services is online CRS-4535: Cannot communicate with Cluster Ready Services CRS-4530: Communications failure contacting Cluster Synchronization Services daemon CRS-4534: Cannot communicate with Event Manager 查询当前节点信息,发现ASM实例 OFFLINE a1:/picclife/app/grid$ crsctl stat res -t -init -------------------------------------------------------------------------------- NAME TARGET STATE SERVER STATE_DETAILS ----------------------------

Linux内核系统调用劫持之kallsyms

扶醉桌前 提交于 2020-01-19 19:01:11
1.通过kallsyms方式 基于Linux 5.0/Linux5.3 的X86-64系统. 1. 通过kallsyms_lookup_name查找sys_call_table地址. 2. 关闭写保护 3. 修改sys_call_table Linux5.0上直接调用write_cr0接口,能够顺利的修改CR0寄存器,而内核版本更新到Linux5.3以后,发现对CR0的修改进行了保护,所以这里需要自定义write_cr0的实现,直接从Linux5.0中把相关代码静态编译进入模块中.这样也可以绕过对CR0的保护. #include<linux/module.h> #include<linux/printk.h> #include<linux/kobject.h> #include<linux/kernel.h> #include<asm/unistd_64.h> #include<linux/syscalls.h> #include<linux/delay.h> #include<linux/kallsyms.h> #include<asm/syscall.h> #include<asm/paravirt.h> #include <asm/nops.h> static unsigned long __lkm_order; static inline unsigned long lkm

介绍Oracle ACFS和Oracle ADVM

不想你离开。 提交于 2020-01-19 17:43:42
Introducing Oracle ACFS and Oracle ADVM ASM集群文件系统(Oracle ACFS)和ASM动态卷管理器(Oracle ADVM)提供了存储管理的关键组件。 本章描述了Oracle自动存储管理集群文件系统(Oracle ACFS)和Oracle ASM动态卷管理器(Oracle ADVM)的组成部分。 本章通过以下主题提供了Oracle ACFS和Oracle ADVM特性的概念和概述: Oracle ACFS概述 理解Oracle ACFS的概念 了解Oracle ACFS管理 ASM动态卷管理器概述 Overview of Oracle ACFS Oracle ACFS概述 Oracle自动存储管理集群文件系统(Oracle ACFS)是一种多平台、可伸缩的文件系统和存储管理技术,它扩展了Oracle自动存储管理(Oracle ASM)功能,支持所有客户文件。 Oracle ACFS支持Oracle数据库文件和应用程序文件,包括可执行文件、数据库数据文件、数据库跟踪文件、数据库警报日志、应用程序报告、BFILEs和配置文件。 其他受支持的文件包括视频、音频、文本、图像、工程绘图和所有其他通用应用程序文件数据。 Oracle ACFS遵循针对Linux和UNIX的POSIX标准,以及针对Windows的Windows标准。 Oracle

Normal模式下ASM中的空间参数解析

南楼画角 提交于 2020-01-17 00:25:45
在做数据库巡检的时候,检查ASM空间是必做的一步。在冗余模式为external时,可以很容易计算出剩余可用空间=Free_MB,如果下图所示,磁盘组DATA的剩余可用空间为22403MB。 如果磁盘组为normal,又是如何计算剩余可用空间,以及REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB的值,这个问题的答案跟很多复杂问题的答案一样:要看情况。 C olumn Description FREE_MB Unused capacity of the disk group (in megabytes). REQUIRED_MIRROR_FREE_MB Amount of space that is required to be available in a given disk group in order to restore redundancy after one or more disk failures. The amount of space displayed in this column takes mirroring effects into account. USABLE_FILE_MB Amount of free space that can be safely utilized taking mirroring into

IDT系统中断描述表以及绕过Xurtr检测的HOOK姿势

笑着哭i 提交于 2020-01-14 08:22:17
什么是中断? 指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。 比如:除零(0号中断)、断点(3号中断)、系统调用(2e号中断)、以及异常处理等都会引发中断,所以自然需要相应的中断例程去进行处理。 这样操作系统就会用数据结构来维护这些中断例程,这个数据结构就是IDT(Interrupt Descriptor Table)。 中断描述表 IDT表的长度与地址是由CPU的IDTR寄存器来描述的。IDTR寄存器共有48位,高32位是IDT表的基地址,低16位是IDT的长度。 typedef struct _IDTR{ USHORT IDT_limit; USHORT IDT_LOWbase; USHORT IDT_HIGbase; }IDTR,*PIDTR; IDTR idtr; __asm SIDT idtr; 可以通过以上SIDT指令可以读取IDTR寄存器。然后通过MAKEWORD宏把高位与地位组合起来就可以获得IDT表的基地址了。 简单来说,IDT表是一张位于物理内存的线性表,共有256个表项。在32位模式下,每个IDT表项的长度是8个字节(64 bit),IDT表的总长度是2048字节。 kd> r idtr idtr

read time stamp counter

萝らか妹 提交于 2020-01-13 04:23:33
  在Pentium以上的CPU中,提供了一条机器指令RDTSC(Read Time Stamp Counter)来读取这个时间戳的数字,并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C++语言保存函数返回值的寄存器,所以我们可以把这条指令看成是一个普通的函数调用。像这样: inline unsigned __int64 GetCycleCount() { __asm RDTSC } 但是不行,因为RDTSC不被C++的内嵌汇编器直接支持,所以我们要用_emit伪指令直接嵌入该指令的机器码形式0X0F、0X31,如下: inline unsigned __int64 GetCycleCount() { __asm _emit 0x0F __asm _emit 0x31 } 来源: https://www.cnblogs.com/gaoqichao/archive/2012/12/10/2812050.html

fatal error: asm/system.h: No such file or directory

流过昼夜 提交于 2020-01-11 15:39:27
最近编译一段驱动代码提示报错“ fatal error: asm/system.h: No such file or directory ” 后面使用linux/slab.h替换后,正常编译通过,功能正常。编译内核环境4.0.0-rc1,实测3.0内核需同样处理。 下面贴出一些常用头文件说明: #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件。 #include <asm/***.h> 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。 #include <mach/***.h> 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。 #include <plat/regs-adc.h>在linux-2.6.31_TX2440A20100510\linux-2.6.31_TX2440A\arch\arm\plat-s3c\include\plat #include <linux/module.h> //最基本的文件,支持动态添加和卸载模块。Hello World驱动要这一个文件就可以了 #include <linux/fs.h> //包含了文件操作相关struct的定义,例如大名鼎鼎的struct file

# openssl 生成ssl证书详解

烈酒焚心 提交于 2020-01-10 20:05:09
1.概念 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。数字证书是一种权威性的电子文档,可以由权威公正的第三方机构,即CA(例如中国各地方的CA公司)中心签发的证书,也可以由企业级CA系统进行签发。 一般证书分有三类,根证书、服务器证书和客户端证书。根证书,是生成服务器证书和客户端证书的基础,是信任的源头,也可以叫自签发证书,即CA证书。服务器证书,由根证书签发,配置在服务器上的证书。客户端证书,由根证书签发,配置在服务器上,并发送给客户,让客户安装在浏览器里的证书。 接下来,认识了证书的基本概念之后,我们来认识下这几个概念,公钥/私钥/签名/验证签名/加密/解密/对称加密/非对称加密。 我们一般的加密是用一个密码加密文件,然后解密也用同样的密码。这很好理解,这个是对称加密。而有些加密时,加密用的一个密码,而解密用另外一组密码,这个叫非对称加密,意思就是加密解密的密码不一样。其实这是数学上的一个素数积求因子的原理应用,其结果就是用这一组密钥中的一个来加密数据,用另一个来解密,或许有人已经想到了,没错这就是所谓的公钥和私钥。公钥和私钥都可以用来加密数据,而他们的区别是,公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥加密数据