支配关系以及流图中的循环(一)

  支配树这个结构在后端优化中有很重要的作用,尤其是SSA格式的程序中,高效的支配树生成尤其重要。   我们说对于一个图G=(V,E,entry), 节点m支配节点n当且仅当从流图入口entry到n的所有路径都经过m,记做:m dom n。 所有支配n的节点组成一个集合叫做支配集,记做d...

2019-04-04 13:53:06

阅读数 145

评论数 0

wpcap过滤器后端代码解读

  wpcap是windows平台下著名的数据包嗅探库,在linux下叫libpcap,数据包嗅探软件wireshark就是用来这个库,其中实现了十分高效的数据包过滤算法。很久以前就想看一下他具体的过滤机制,不过那时候没看懂。这两天看到一篇文章提到了winpcap的中间码是SSA格式的,所以又提起...

2019-03-26 14:10:56

阅读数 35

评论数 0

llvm中的Tarjan强连通分量算法

  llvm中的强连通算法使用的也是Tarjan算法,与我自己实现的那种粗糙的算法不同,llvm使用栈代替递归实现dfs,一方面防止栈空间不足的问题,另一方面借助这个栈,可以记住当前遍历的状态,从而实现了强连通分量上的迭代器。总之实现的十分的优雅。   代码文件在include\llvm\ADT...

2019-03-23 11:36:45

阅读数 30

评论数 0

流图中的强联通分量

在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strong...

2019-03-22 17:01:41

阅读数 14

评论数 0

对流图的遍历

  正常的图遍历有DFS和BFS,CFG作为图的一种自然也是如此,不过在CFG中,BFS的应用貌似并不多。 1,深度优先生成树,树边,前向边,后向边,横边。   在DFS的过程中,按照如下规则标记图中的所有边: 存在一条边从一个节点指向其后代,并且之前没有被标记过,则将该边标记为树边...

2019-03-22 10:51:56

阅读数 31

评论数 0

流图的分类与识别

源代码的结构在编译器中往往会在某个环节被转换成CFG,不同的控制语句会生成形形色色的控制流结构,而在后端转换的过程中又会生成许多前端语法无法描述的结构出来,在控制流分析的过程中需要去识别这些结构。这篇文章简单的介绍一些基本结构。 1,基本块(basic block)。基本块是一个执行时连续的语句序...

2019-03-21 12:37:43

阅读数 44

评论数 0

Win32下的非侵入式协程实现

关于协程和libco 本项目Github地址   协程实现异步其实就是用同步的业务逻辑代码,但内部却执行异步等待并进行调度,既保证的代码的可读性,又能实现异步的高并发。在Windows编程中,往往会有大量阻塞的IO操作,比如这段代码: CHAR buf[4096]; DWOR...

2018-04-15 20:54:06

阅读数 93

评论数 0

程序性能优化手段-实际代码案例1

  在前两篇中,分别介绍了通过数据分片和避免伪共享两种方法来增加程序性能。现在来看一个实际的代码案例。   在Windows内核中,有一些带CacheAware的函数,包括RundownProtection和PushLock系列的函数。顾名思义,这些函数是进行了Cache友好的优化,其中包括了对...

2018-03-30 07:34:21

阅读数 427

评论数 0

程序性能优化手段-避免伪共享

  当分配数个变量或者定义数个全局变量时,这些不同用途的变量很可能会被分配到很近的地址空间上,会导致CPU在读取时,他们会处在同一个Cache line中。如果这时一个CPU上的线程在操作其中一个变量,而另一个CPU上的线程在读另一个变量,将导致读线程CPU不得不和写线程CPU进行一次缓存同步后才...

2018-03-28 21:47:24

阅读数 112

评论数 0

程序性能优化手段-共享数据的拆分

  很多情况下,多个线程需要对一块内存进行大量的写操作,肯定是需要同步机制的支持的。即使是简单的加减法也需要原子锁的同步支持,其他情况下可能还需要其他更重量级锁的支持。   除此之外,不同的CPU对同一块内存的写操作也会造成CPU之间的缓存同步,这会大大加重总线负担从而影响程序的效率。详细内容可...

2018-03-27 22:04:06

阅读数 73

评论数 0

ELAM驱动程序(优先启动反病毒驱动程序)

WDK中ELAM驱动示例 从MSDN中摘抄的关于这种驱动的简介。链接 简介   从Windows8起,微软为反病毒软件增加的新的驱动类型:Early-Lunch Anti-Malware驱动(ELAM驱动)。这种驱动启动的比其他boot类型的驱动更加早并且提供了回调向ELAM驱动通知正在...

2018-02-18 21:32:41

阅读数 394

评论数 0

Windows内核对象头部结构

在Windows中,内核对象由三部分组成,其中第一部分是由数个不确定的结构组成,第二部分就是结构头OBJECT_HEADER,第三部分则是对象体。后两部分容易确定,OBJECT_HEADER后48个字节就是对象体。第一部分则是完全隐藏起来的机制,而且Win7系统中OBJECT_HEADER里也没有...

2017-09-19 11:53:00

阅读数 460

评论数 0

Redis源码学习(2):事件循环

Redis中的事件循环是他的ae模块(advance eventloop?),这是个简单的事件循环模块,自身实现了事件循环框架和时间事件逻辑,而具体事件处理则根据不同的系统编译不同的模块。ae主要由这几个模块组成: ae.c ae.h ae_epoll.c ae_evport.c ae_kqueu...

2017-07-25 10:29:35

阅读数 294

评论数 0

Redis源码学习(1):adlist

redis中的adlist是一个简单的无环双向链表,主要逻辑在这两个文件中实现: adlist.h adlist.c 结构也很简单,数据结构中最基本的结构。 添加节点代码:if (after) { node->prev = old_node; node->next...

2017-07-24 20:43:37

阅读数 151

评论数 0

IA32e下分页的开启:概述

内存分布 IA32e下的地址用64位来表示,但CPU只使用了其中的前52位,即4PB的最大物理内存寻址空间,而开启分页后,CPU只使用其中48位,即256TB的最大虚拟内存寻址空间,而到了Windows,则更是只使用了其中44位,即只用16TB的虚拟内存寻址空间,其中00000000000000...

2016-11-20 22:07:48

阅读数 931

评论数 0

EDK2编译与OVMF编译

新版EDK修正了许多bug并且已经支持VS2015,这里就是在VS2015的环境下操作的。 首先下载EDK2 EDK2官方下载 这里下载的EDK2一开始式没有Win32编译环境的,需要自己编译: 打开CMD,定位到EDK2的BaseTools下,输入get_vsvars,执行完后输入vsv...

2016-10-13 13:54:44

阅读数 3584

评论数 1

UEFI下Windows引导过程

引导文件 在UEFI安装完操作系统后,Windows至少使用两个分区,一个叫做ESP分区(EFI SYSTEM PARTITION),用于存放启动文件,另一个则是BIOS下正常的系统分区,不同的是,BIOS下引导文件是winload.exe,UEFI下引导文件式winload.efi,两者都是p...

2016-10-13 13:25:32

阅读数 14736

评论数 0

基于Protobuf和Libuv实现RPC

公司要把产品转架构,虽然和我们驱动开发没什么关系,但还是抱着看热闹的心态研究了下和架构相关的一些问题。这阶段主要研究了下RPC这个东西。 RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络...

2016-08-23 17:03:11

阅读数 2334

评论数 0

PE文件操作-简单的加壳实现

处于一些原因,需要对PE文件进行加壳。所谓加壳就是有某种编码算法对原始文件数据进行编码,并使原始文件内容成为数据部分,而嵌进文件的解密代码成为主体。在loader加载加壳文件后,会将控制权交给解码程序,解码程序在完成解码后,再把控制权交给原始代码。 这个加壳程序是学习之用,所以只实现了最简单的可...

2016-08-14 16:34:54

阅读数 1014

评论数 0

PE文件操作-动态加载

有时会有这样的需求,要把一个dll加载到进程空间或者对付地址空间随机化技术,这就需要自己实现一个PELoader。在PE文件中,许多数据在内存中的位置已经以RVA的形式在链接时给出,我们只需要根据节表的描述准确的按位置加载,大部分程序就可以正确运行了,但有几个类型的数据还是需要loader来调整的...

2016-08-14 12:34:18

阅读数 849

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭