ASM

一种在C语言中用汇编指令和 System V ucontext 支撑实现的协程切换

天大地大妈咪最大 提交于 2020-02-28 03:23:53
1 实现内容 此文在看了 python yield 和 yield from 机制后,觉得 这种轻量级编程技术在小并发场景下优雅可爱,在大并发场景下较进程或线程而言能突破资源瓶颈 ,实在令人忍不住而想在C语言中实现一个。 然后经过一些学习后,此文就在 Linux 上用C语言实现了一个。目前具体包括 [1] co_yield() —— 类似 python 的 yield,用于协程切换; [2] co_send() —— 类似 python 生成器中的 send(),用于开始或恢复协程的执行; [3] co_yield_from() —— 类似 python 的 yield from,用于同步基于 co_yield() 切换的协程; [4] co_loop() —— 略似于 python 的 asyncio.loop(),用于协程并发调度。 e.g. /** ** brief: suspending current coroutine related with ci then switch to specific coroutine when co_yield() called. ** param: ci, bears control-information for corresponding coroutine. ** return: zero returned if

uboot makefile分析之 make xx_config

时光怂恿深爱的人放手 提交于 2020-02-27 09:26:51
make mini2440_config 分析: Uboot第一步--make xxx_config。 mini2440_config: unconfig @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 tekkamanninja s3c24x0 unconfig的定义-- unconfig: @rm -f $(obj)include/config.h $(obj)include/config.mk \ $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \ $(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep 好了,清楚一点了。清楚了,但我又迷茫了,为什么我一运行 make mini2440_config就会跑到mini2440_config : unconfig 这个地方运行啊?如果非要解释那么好吧:mini2440_config是一个伪目标,因为mini2440_config的:后面只跟着一个 unconfig,而unconfig也是一个伪目标。为什么unconfig是一个伪目标呢?因为unconfig的:后面什么都没有。如果他是个变量 的话 后面一定会加点什么东西,他就像make clean的clean一样,是个伪的。

spring的动态代理

我们两清 提交于 2020-02-25 18:58:51
动态代理类型 spring有两种动态代理,分别是JDK和cglib。 原理区别 java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。 cglib动态代理是利用asm包,先加载代理对象类的class文件,然后修改其字节码生成子类来处理。 代理策略 如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP。 如果目标对象实现了接口,可以强制使用CGLIB实现AOP。 如果目标对象没有实现接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换。 字节码区别 JDK动态代理只能对实现了接口的类生成代理,而不能针对类。 CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。 因为是继承,所以该类或方法最好不要声明成final。 来源: oschina 链接: https://my.oschina.net/k8king/blog/3165624

shellcode与系统安全

不羁的心 提交于 2020-02-25 16:13:59
shellcode与系统安全 http://tommwq.tech/blog/shellcode-and-security/ 1. 避免shellcode中出现0x00的方法 2. 获取shellcode地址 3. 向函数传递参数 4. 部分Linux系统调用 4.1. execve(32位) 5. 将二进制文件转换为C语言字符串 6. 一个简单的shellcode 7. 一些辅助函数 8. 一个简单的缓冲区溢出示例 9. 示例2:缓冲区溢出攻击 10. 缓冲区溢出攻击的基本流程 11. 数据执行保护和绕过 12. 示例3:绕过DEP 13. ROP 14. 示例4:ROP 15. 思考 1 避免shellcode中出现0x00的方法 使用 xor eax, eax 代替 mov eax, 0x00 。 使用 xor eax, eax; mov al, 0x01 代替 mov eax, 0x01 。 2 获取shellcode地址 从逻辑上看, call target 等效于 dec esp mov [esp], eip jmp target 因此,执行call指令可以将下一条指令的地址写入栈。在call之后执行 pop eax 就可以将目标地址保存到eax中。call分为near call和far call,near call使用的是段内的相对地址

31.Linux-分析并制作环形缓冲区

给你一囗甜甜゛ 提交于 2020-02-22 23:43:29
1.环形缓冲区log_buf[]又是存在内核的哪个文件呢?   位于/proc/kmsg里,所以除了dmesg命令查看,也可以使用cat /proc/kmsg来查看 2.但是,dmesg命令和cat /proc/kmsg有所不同 2.1 dmesg命令   每次使用,都会打印出环形缓冲区的所有信息 2.2 cat /proc/kmsg   只会打印出每次新的环形缓冲区的信息   比如,第一次使用cat /proc/kmsg,会打印出内核启动的所有信息   第二次使用cat /proc/kmsg,就不会出现之前打印的信息,只打印继上次使用cat /proc/kmsg之后的新的信息,比如下图所示: 3.接下来我们便进入内核,找/proc/kmsg文件在哪生成的   搜索"kmsg",找到位于fs\proc\proc_misc.c 文件的proc_misc_init()函数中,   该函数主要用来生成登记的设备文件,具体代码如下所示: const struct file_operations proc_kmsg_operations = { . read = kmsg_read , //读函数 . poll = kmsg_poll , . open = kmsg_open , . release = kmsg_release , } ; void __init proc_misc

ASM ClassReader failed to parse class file

半城伤御伤魂 提交于 2020-02-13 01:01:43
前言 维护很久以前的项目时,出现这个问题:ASM ClassReader failed to parse class file 分析 经过网上搜索该问题,发现是spring版本引起的。 Note that the Java 8 bytecode level (-target 1.8, as required by -source 1.8) is only fully supported as of Spring Framework 4.0. In particular, Spring 3.2 based applications need to be compiled with a maximum of Java 7 as the target, even if they happen to be deployed onto a Java 8 runtime. Please upgrade to Spring 4 for Java 8 based applications. 出问题的项目中使用的 spring 版本为3.2.8,jdk使用了java8。 解决办法 该问题的解决办法方案有两条: a. 使用jdk7 b. 升级spring 4 参考 https://blog.csdn.net/blueheart20/article/details/50150529 https:/

OGG实验:喂奶间隔数据表通过OGG配置同步

為{幸葍}努か 提交于 2020-02-12 11:52:27
我之前在《 使用SQL计算宝宝每次吃奶的时间间隔(数据保障篇) 》中提到数据实时同步的方案,其中有一种是数据表通过OGG进行同步,当时没有详细展开测试,只给了之前学习OGG时的配置示例。由于之前很少接触OGG的管理运维,最近在进行实际测试时遇到些问题,虽然不难,但也是初学者常遇到的问题,所以记录下这个过程。 需求: 将TEST用户下的数据表T_BABY通过OGG进行同步。 环境: 源端:RHEL6.5, IP地址:192.168.1.61 Oracle 11.2.0.4 RAC(2 nodes)+ OGG 12.2.0.2 待同步数据表test.t_baby已有数据 目标端:OEL5.7, IP地址:192.168.1.11 Oracle 11.2.0.3 单实例 + OGG 12.2.0.2 数据表通过OGG配置同步: 1.源端和目标端软件安装部署 2.源端配置 3.目标端配置 4.实验中遇到的问题处理 1.源端和目标端软件安装部署 在源端和目标端都部署OGG 12.2.0.2,使用图形界面安装,默认选择安装完成后自动启动mgr进程,安装截图类似如下: 2.源端配置 首先确认数据库是否处于归档模式,是否开启force logging和数据库最小附加日志: select log_mode,supplemental_log_data_min,force_logging from v

ORACLE -- RAC 配置更改IP

六眼飞鱼酱① 提交于 2020-01-29 00:49:32
实验对IP 地址做如下修改: Public IP 10.85.10.119/121 -- > 10.85.10.219/221 Privite IP 192.168.1.119/121 -- > 192.168.1.219/221 Virtual IP 10.85.10.122/123 -- > 10.85.10.222/223 实验平台: redhat 4.7 + ORACLE 10G + raw +ASM 一. 停止oracle 相关的所有进程, 包括数据库, asm, node application, crs本身. 1.1 查看当前系统上crs 运行的状态 [root@node1 bin]# pwd /u01/app/oracle/product/crs/bin [root@node2 bin]# ./crs_stat -t Name Type Target State Host ------------------------------------------------------------ ora....C1.inst application ONLINE ONLINE node1 ora....C2.inst application ONLINE ONLINE node2 ora.MYRAC.db application ONLINE ONLINE node2

Oracle ASM存储限制

五迷三道 提交于 2020-01-26 03:55:59
What is the Max LUN size in ASM 12c (not using Flex ASM). Before ASM 12c there was an limitation of 2 Tb LUNs. 12cR1 The following information was taken from the Oracle® Automatic Storage Management Administrator's Guide 12 c Release 1 (12.1) under Oracle ASM Storage Limits . To use these limits must use compatible.asm and compatbile.rdbms set to 12.1. Before 12c, the limit was 2TB per disk. Here is what the documentation states: Without any Oracle Exadata Storage, Oracle ASM has the following storage limits if the COMPATIBLE.ASM disk group attribute is set to 12.1 or greater: 4 PB maximum

DSP程序中常出现的EINT、DINT、ERTM、DRTM、EALLOW、EDIS的理解

风格不统一 提交于 2020-01-25 10:06:48
对DSP程序中常出现的EINT、DINT、ERTM、DRTM、EALLOW、EDIS的理解 在看DSP 的初始化程序中经常会看到 void DisableDog ( void ) { EALLOW ; SysCtrlRegs . WDCR = 0x0068 ; EDIS ; } EALLOW与EDIS究竟有什么含义呢? 在.h文件中会发现,这两条其实是汇编指令 # define EALLOW asm(" EALLOW") # define EDIS asm(" EDIS") 同样的还有: # define EINT asm(" clrc INTM") //INTM置0,开中断 # define DINT asm(" setc INTM") //INTM置1,关中断 # define ERTM asm(" clrc DBGM") //使能调试事件 # define DRTM asm(" setc DBGM") //禁止调试事件 解释: TI系列DSP为了提高安全性能,将很多关键寄存器作了保护处理。通过状态寄存器1(ST1)的位6设置与复位,来决定是否允许DSP指令对关键寄存器进行操作。这些关键寄存器包括:器件仿真寄存器、FLASH寄存器、CSM寄存器、PIE矢量表、系统控制寄存器、GPIOMux寄存器等等。 DSP由于在上电复位之后,状态寄存器基本上都是清零