Valgrind学习

Valgrind与其他DBI(Pin, DynamoRIO)的区别


我们需要了解DBI的几个

D&R


Disassemble-and-Resynthesise

反汇编后重新组装

Valgrind采用这种方式,将Client中的代码全部翻译成IR,然后在IR级别进行instrument,最后将IR翻译成机器代码执行。

如果Client中的一段代码被翻译成IR,那么原来的native code就不再存在了,以后也不会再使用到。

Native Code --> IR --> IR --> Machine Code
            ^        ^      ^
            |        |      |
            |        |      |
        translate    |      |
                     |      |
                instrument  |
                            |
                         translate  

C&A


Copy-and-Annotate

拷贝并添加注解

将Client中的native code原封不动地拷贝过来,并且对于每条指令都添加相应的注解,以解释这条指令的效果。

DynamoRIO是通过给每条指令添加一个额外的data structure;

Intel Pin是通过提供相应的获取指令相关信息的API;

这些添加的注解可以指导进行相应的instrument,并且底线是不影响原来的native code的执行效果。


Valgrind的IR

进行IR扫描时单元,在Valgrind 3.0.0版本之前,是basic block(单入口,单出口);

而在之后的版本中,换成了super block(单入口,多出口);

IR的特点是:

architecture-neutral
D&R
single-static-assignment(SSA)

每个IR block包含一组statements的列表,而每个statement又包含多个expression。

expression是pure的,即不依赖外部状态的。

expression可以是tree-IR,也可以是flat-IR,二者的区别在于:

tree-IR: complicated
flat-IR: simple, but need to introduce temporaries, and one tree-IR will expand to several flat-IR expressions.

but
they(tree-IR) can also be flattened by introducing statements that write
intermediate values to temporaries.

时间: 2024-08-05 11:17:12

Valgrind学习的相关文章

valgrind 使用入门

近期在学习使用valgrind 来定位性能问题,记录一下整个操作过程以及涉及到的工具 一般在机器上都会预装valgrind 工具 使用callgrind 工具检查程序的调用情况,例如使用valgrind 来监控sequoiadb 的函数调用关系,可以执行以下命令来启动sequoiadb的某个节点进程 valgrind --tool=callgrind /opt/sequoiadb/bin/sequoiadb -c /opt/sequoiadb/conf/local/11910/ valgrind

值得学习的C/C++开源框架(转)

值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali.cz/~cz210552/webbench.html - 2. Tinyhttpd tinyhttpd是一个超轻量型Ht

值得学习的C语言开源项目

- 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali.cz/~cz210552/webbench.html - 2. Tinyhttpd tinyhttpd是一个超轻量型Http Server,使用C

valgrind使用入门

valgrind:a suite of tools for debugging and profiling programs 1)简介:Valgrind用于调试.分析Linux的可执行文件. 2)安装: yum install valgrind.x86_64 # yum search valgrind 3)常用选项:--tool=<toolname>:运行Valgrind的工具.默认是memcheck,其他可用值有cachegrind.callgrind等. 4)示例: int main()

Linux学习之CentOS(一)--CentOS6.4环境搭建(转)

一.前言 作为一个想从事j2ee后台开发的程序猿,linux系统怎能不学呢?所以,这几天自己准备学习一下linux操作系统.废话不多说,直奔主题. 要学linux开发,首先得要安装linux系统吧,这里我在选择之前也挺迷茫,因为linux系统有太多可选择了,例如最著名的的RedHat.咱中国人开发的红旗Linux,Ubuntu.Fedora.CentOS等等,最后在请教了一下前辈们以后,选择了安装CentOS这个系统. 二.CentOS简介 CentOS(Community ENTerprise

C++的一些不错开源框架,可以学习和借鉴

larryjiang 我的文章 我的文档 我的文集 我的收藏 我的草稿 我的微博 我的投票 我的活动 我的相册 我的日历 退出登录 × 查看26条@我的微博 查看1条系统消息 查看44条@我的微博 创建文章 创建活动 创建相册 创建投票 创建文集 创建定时短信 手机KM 频道 研发月报 腾讯月刊 Q益平台 微爱益起来 职业发展 总办交流 KM周刊 乐问周刊 应用 活动 投票 相册 文集 幻灯片 祝福卡 定时短信 达人堂 实验室 期刊 工作圈 我的K吧 K吧排序 浏览K吧 | 创建K吧 KM平台组

RHCA学习笔记:RH442-Unit8进程与调度

UNIT 8  Processes and the Scheduler 进程与调度 学习目标 A. CPU cache 与Service time之间的关系 B. 分析应用程序使用CPU cache时的情况(CPU使用率与CPU cache命中率) C. 抢占 (根据优先级抢占) D 根据进程优先级顺序进行调度与排序 E. 监控内核和进程的性能 8.1    Characterizing prosess states 进程状态  查看进程状态: ps axo pid,comm,stat –sor

RHCA442学习笔记-Unit11内存回收

Unit 12 Memory Reclamation 内存回收            学习目标: A. 了解和调整内存回收 B.   调整内存溢出 C. 调整虚拟内存(swap)的使用 12.1        Characterizing page status各种页面状态的特征 A. .Free 空闲页 页面可以马上分配给进程 B Inactive Clean 干净页 a. 页面内容已写入磁盘,或者 b. 数据从磁盘读入内存后未作修改 c. 这种页面可以分配 C. Inactive Dirty

C++内存管理学习笔记(7)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9178099 /************************