构建动态数据竞争检测平台

之前的文章分别介绍了基于Lockset算法、基于happens-before关系以及基于两者混合的方法。对于这些方法,已有的一些论文中提到的有关实验对比可能都比较片面或是不太客观,因此实现这些方法做一个比较全面的实验对比分析是很有必要的,不仅可以对这些已有的方法有一个更深入的理解,同时也能够发现他们存在的一些共性问题,方便后续的研究。

在实现之前文章提出的动态数据竞争检测方法之前,有以下几个人问题需要思考。

1. 如何动态监视程序的行为?

一般情况下都会采取插桩来进行对程序行为的监视,插桩又分为静态源码插桩,静态二进制插桩,动态二进制插桩等。静态插桩的话,会改变原始程序的结构,因此这里我们采取动态二进制插桩。比较经典的动态二进制插桩平台包括Intel Pin,DynamoRIO以及Valgrind。Pin的话由于其良好的兼容性,丰富的API接口使得其使用更加广泛。这里的话,我们使用Pin来帮助我们对程序进行动态二进制插桩,从而监视程序运行过程中的行为。

Pin框架

我们可以通过编写Pintool来实现我们自己想要的一些逻辑,通过API来从Pin中获取程序相关的信息。这里有关Pin以及如何编写Pintool将会在后面的文章中陆续介绍。

2. 动态监视程序的哪些行为?

对于之前文章中提到的动态数据竞争检测方法,我们可以发现的一个共同的特点就是这些方法都需要监视线程同步原语。

序号 函数名

1 pthread_mutex_lock

2 pthread_mutex_trylock

4 pthread_mutex_unlock

5 pthread_mutex_timedlock

6 pthread_rwlock_wrlock

7 pthread_rwlock_trywrlock

8 pthread_rwlock_rdlock

9 pthread_rwlock_tryrdlock

10 pthread_rwlock_unlock

11 pthread_cond_signal

12 pthread_cond_wait

13 pthread_cond_broadcast

14 pthread_barrier_wait

15 sem_post

16 sem_wait

17 pthread_create

18 pthread_join

同时还包括内存读写访问,动态内存申请等系统调用。

3. 如何构建动态数据竞争检测平台

对于上述提到需要动态插桩并且监视的读写指令或是Pthread库函数,系统库函数等,这些行为发生的时候,可以将这些行为以事件的形式发送到检测器中,检测器根据不同的检测算法执行相关的数据竞争检测。因此,我们以一种事件驱动模式来构建我们的动态数据竞争检测平台。

框架

该平台有着非常良好的扩展性,基本的动态数据竞争检测器Detector包含公共的一些实现通过继承这个Detector就可以实现其他不同的动态数据竞争检测方法,为后续我们对这些数据竞争检测方法进行实验分析提供比较便利的途径。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊partition的方式

一般来说,数据库的繁忙体现在:不同用户需要访问数据集中的不同部分,这种情况下,我们把数据的各个部分存放在不同的服务器/节点中,每个服务器/节点负责自身数据的读取...

661
来自专栏debugeeker的专栏

《coredump问题原理探究》windows版7.3节map

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

761
来自专栏何俊林

使用TensorFlow进行训练识别视频图像中物体

本教程针对Windows10实现谷歌公布的TensorFlow Object Detection API视频物体识别系统,其他平台也可借鉴。

1432
来自专栏腾讯云TStack专栏

FileStore压缩存储(优化篇)

前言 前面已经分析过RBD在Ceph的文件分布,就是将一个完整的块设备,映射成大小相同的数据块,然后通过Crush算法进行Map,最后存储在文件中。FileS...

6584
来自专栏Python自动化测试

CSV文件在网络爬虫中的应用

在上一个文章中详细的介绍了CSV文件内容的读取和写入,那么在本次文章中结合网络爬虫的技术,把数据获取到写入到CSV的文件中,其实利用爬虫的技术...

1404
来自专栏苍云横渡学习笔记

【day 11】python编程:从入门到实践学习笔记-基于Django框架的Web开发-Django入门(二)

学习笔记目录 【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型 【day 2】python编程:从入门到实践学习笔记-列表以及其操...

3097
来自专栏IT派

从零开始:手把手教你安装深度学习操作系统、驱动和各种python库!

为了研究强化学习,最近购置了一台基于 Ubuntu 和英伟达 GPU 的深度学习机器。尽管目前在网络中能找到一些环境部署指南,但目前仍然没有全面的安装说明。另外...

4008
来自专栏数据魔术师

词云图:论一个精致猪猪男孩的数据修养

“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过...

873
来自专栏安恒信息

LOCKY勒索者新花样:通过PDF投递

摘 要 最近安恒APT团队截获一个新版的LOCKY勒索者病毒样本,区别之前大多数样本采用WORD文档投递并用宏代码远程下载执行的方式,该样本在原有的WORD文档...

2696
来自专栏机器之心

从零开始:深度学习软件环境安装指南

3538

扫码关注云+社区