【论文阅读】C++ 二进制插桩检测程序缺陷

【二进制插桩】基于DynamoRIO的代码插桩方案 一种在程序的二进制代码中插入额外代码的技术,用于监控、分析或修改程序的行为。 阅读详情

本文是对硕士学位论文《基于二进制指令插桩的C++程序缺陷检测技术的研究与实现》的阅读笔记,作者对于 C++ 程序缺陷以及检测手段都有很详细地描述,感兴趣的建议看原论文。

1、程序缺陷检测技术手段

1.1、静态分析

静态分析指不运行程序,直接对应用程序的源代码或者机器码等进行缺陷分析。

1.2、动态测试

动态测试指通过直接运行程序的方式对应用程序进行缺陷检测。

1.3、对比

 静态分析动态测试
优势可以比较全面覆盖程序所有执行分支准确率高
劣势准确率与运行开销之间难以平衡;误报率较高,需对结果人工验证在构造设计测试用例上需花费较多时间;漏报率较高,只能测某条路径的缺陷,需多次测试;拖慢程序的运行时间
基本操作先通过对应用程序的代码进行语法分析、数据流分析等工作,再将这些分析之后得到的控制流、数据流和已有的缺陷模式进行匹配构造测试实例、执行程序、分析程序的输出结果
相关工具lawfinder、fortify、coveritySystemTap、 Gprof

 

2、C++ 程序缺陷

2.1、内存泄漏

内存泄漏特指在程序的执行过程中,通过使用库函数或者调用操作系统 API 动态分配了堆内存之后,丢失了用于释放该块内存的指针,从而导致申请的堆内存无法被释放的行为。

尽管在进程结束时操作系统会将该进程占有的,包括动态申请的堆内存在内的,绝大部分资源进行回收。

但是对于那些需要长时间运行的程序,内存泄漏仍会造成非常大的危害。因为不停的申请堆内存而不释放,进程以及操作系统的可用存储空间会越来越少,最终严重影响系统效率,并且接下来的内存申请操作都会失败。在些情况下,操作系统甚至会直接杀死那些内存使用过多的进程,以保证系统的稳定性。

2.2、内存释放错误

C++ 程序开发者不仅仅可以通过 brk、mmap 等系统调用来申请堆内存,还能通过 malloc、realloc 等库函数,以及 C++ 语言中的 new/new[] 操作符来申请堆内存。而在进行内存的释放时,也必须根据堆内存申请的具体方式选择对应的释放手段。所以如果申请和释放的方式不匹配的话,很容易引发未定义行为,从而影响程序的正常运行逻辑。此外,对无效的地址进行释放,同样也会造成未定义行为,比如重复释放同一个指针。

由于错误的释放方式通常都会导致未定义行为,而未定义行为都是根据具体编译器的实现以及每次程序的运行状态不同而变化的。这些未定义行为使得内存释放错误也变得难以定位。

2.3、非法地址引用

非法地址引用是指应用程序试图去读写错误的内存地址的行为,这类错误往往能够导致程序出现逻辑错误甚至直接崩溃。这类错误可以分为两大类,一种是试图读写无效的内存地址,另外一种则是试图去读取未初始化的数据。

这里无效的地址不仅仅指那些只有操作系统内核才能访问的内存区域、以及尚未分配的堆区内存这类操作系统层面的无效地址,也包括的库函数层面的无效地址。很多内存分配器,如标准库中的 malloc 函数,在具体实现时都会事先通过操作系统的 API 向操作系统申请一整块堆内存,当其他模块调用相应的接口来申请堆內存时,再由分配器从这些已经申请好的内存中截取合适大小的内存,并将其地址返回给调用的模块。这意味着对于除内存分配器本身之外的代码,尽管操作系统分配了一整块连续的内存,但是只有由分配器所返回的那一部分内存是可以正常访问的。

通常情况非法地址引用会造成程序直接崩溃,但是读写那些仅由库函数可见的部分,以及使用未初始化的数据却能造成未定义行为。如同上文所提到的,在 C++ 语言中,那些能够造成未定义行为的错误往往都是很难定位与修复的。

2.4、缓冲区溢出

缓冲区溢出发生的原因主要有两种,一种是因为程序中客户代码的逻辑错误从而导致的缓冲区溢出,如数组越界错误;另外一种则是因为在调用库函数以及操作系统 API 时,传递了错误的参数从而导致的缓冲区溢出,比如在 memcpy、strcpy 等标准函数时发生缓冲区重叠,在使用 POSIX 标准的 read 函数时指定了错误的缓冲区长度等等。

缓冲区溢出错误在各种操作系统和应用软件中广泛存在,缓冲区溢出错误往往能够造成非常严重的损失并且难以发觉,因为只有被写坏的数据和由于缓冲区溢出而读到的无效的数据被使用时才会造成程序的逻辑错误,从缓冲区溢出到程序出现未定义行为的过程中存在一定的延迟。更严重的是,当程序中的函数返回地址等敏感数据被修改时,会直接影响到程序的执行控制流,一旦被黑客利用,甚至可以直接将程序控制流跳转到恶意代码的起始地址上,从而达到恶意代码注入的目的。

3、程序插桩技术

3.1、源代码插桩

手动在需要收集信息的地方插入探针,之后重新编译运行被测程序。

3.2、静态二进制插桩

直接对程序编译之后的二进制机器码进行插桩。

3.3、动态二进制插桩

在程序运行时,直接接管被测程序并且截获其二进制指令并插入探针。

被广泛用于程序分析(性能分析-cache 命中等)、体系架构研究(对处理器进行信息收集)、二进制指令翻译(替换平台不支持的指令)。

3.4、对比

 优势劣势
源代码插桩能够准确地插入探针;插入探针的代码也能被进行编译优化没有源码无法插桩;对编程语言敏感,难处理混编;不能对正运行的程序插桩;难以得到彻底控制,如访问寄存器等
静态二进制插桩不需要源代码;能够获取到寄存器信息编写难度大;平台相关,可移植性差;对动态链接库难以操作;不能对正运行的程序插桩
动态二进制插桩不需要源代码;可以操作到动态链接库的代码;获得对程序的彻底控制;不需要重新编译程序工具编写难度大;运行时开销高;抽象程度低,丢失如类型信息等

 

4、动态二进制插桩框架

4.1、Pin

 

 

Pin 在框架内部实现了一台虚拟机,虚拟机内存包括了一份完整的运行时上下文,在读取被测程序的二进制机器码作为输入时,Pin 会根据被测程序中的跳转指令和 Pintool 的插桩粒度,将被测的二进制机器码切分成一个个小的代码块。

检测开始时,Pin 框架读取被测程序的二进制机器码,以代码块为基本单位插入 Pintool 中设置好的探针,再通过虚拟机的 JIT 编译器将该代码块翻译成能够直接在实际宿主机器上运行的二进制机器码,最后通过调度器 (Dispatcher) 将转换完毕的代码块缓存起来并在适当的时机调度运行。

4.2、Valgrind

 

 

Valgrind主要由内核和工具构成,内核负责底层的二进制代码分析和 JIT 编译等工作,而工具则负责编写具体的插桩逻辑。在 Valgrind中,所有的机器码,包括探针代码,都会被翻译成一种统一的中间指令,这种中间指令在 Valgrind 中被称为 IR。

Valgrind 执行检测的过程可以分为以下几步:

1、初始化,启动器读取并分析指令,根据具体的系统启动正确的工具文件。

2、读取机器码并进行反汇编,将机器码翻译成 IR,并对 IR 进行第一次优化,包括展开复杂指令、消除冗余、死代码消除等。

3、对 IR 进行插桩,在反汇编之后的 IR 指令中插入指定的探针,并再次进行指令优化。

4、对 IR 指令进行寄存器分配,将虚拟的寄存器映射到实际的主机上去,最后根据宿主机的指令集对 IR 进行汇编,至此,代码块已经被插桩完毕并且可以直接在真实的硬件环境中运行。

5、将翻译插桩完毕的代码交由调度器(Dispatcher)进行调度运行。调度器还负责对已经翻译完毕的代码块进行缓存,以提高程序的运行速度。

4.3、DynamoRIO

 

 

DynamoRIO 的内核主要由三个模块组成:调度器(Dispatch)、基本块构建器(Basic block builder)和代码缓存器(Code cache)。其中基本块构建器负责从被测程序中切分出基本块并完成插桩,代码缓存器负责缓存并管理已经插桩完毕的基本块,最后由调度器来截获被测程序的指令,完成内存事件的分发并协调各个模块之间的工作。

为了解决在解释执行过程中造成的运行时速度大幅降低的情况,DynamoRIO 使用了指令缓冲技术和分支预测技术来减少解释执行所带来的成本。

5、影子内存

5.1、定义

根据百度百科,影子内存(shadow RAM)是基本输入输出操作系统(BIOS)程序在随机访问存储器(RAM)中的一个备份,它们能被更快的访问。

影子内存技术的基本思路是通过使用额外的内存空间(影子内存),来映射被测程序的实际虚拟内存,在被测程序被执行的过程中,跟踪被测程序的内存操作序列,并将相关信息记录在影子内存中,最后根据影子内存所携带的信息完成对被测程序运行情况的跟踪和检测。

影子内存技术在实现上的难点在于平衡检测精度和跟踪程序指令并维护影子内存所带来的额外运行时开销。针对不同的编程语言,需要根据其具体的语言实现机制以及其具体的内存管理手段来进行对应用程序指令的跟踪以及影子内存的维护。同样的,在设计影子内存时还需要根据具体的需求来决定影子内存的映射粒度。

 

 

 

 

6、检测方法

6.1、内存申请操作的跟踪

大部分内存分配库都是使用动态库的方式来实现的,在程序载入时可以通过符号表来获取到这些函数的函数名,所以可以通过 DynamoRIO 的函数替换功能,就能以带有信息记录代码的版本替换这些原来的动态内存申请操作。

6.2、内存泄漏检测

将被测程序已经申请的堆内存按照持有情况分为三类:一定可达的、一定不可达的、可能可达的。

一定可达的指属于进程持有的指针集合的内存块。

可能可达的指没有直接保存内存块的起始地址,但保存了指向内存中间某个位置的指针,这种情况较难判断内存是否泄漏。

一定不可达指不存在指向这些堆内存的指针。

 

 

利用 C++ 内存对齐的特性,配合影子内存中保存的记录,在内存块中检验地址为 4 的整数倍的内存地址,就可以获取某一块内存中可能的指针。

6.3、内存释放错误检测

通过 DynamoRIO 的函数替换 API,可以将这些内存分配/申请函数进行替换,在申请时将他们的调用信息记录到堆影子内存的申请信息表中。

同样的,通过对释放函数的替换,在函数释放之前,会在释放地址所对应的申请信息表中查找申请信息,如果释放的类型同申请信息表中记录的申请信息不匹配或者在申请信息表中找不到对应的句柄指针,那么会尝试对这些操作进行相应错误处理,并将错误记录到错误报告中。

 

 

6.4、非法地址引用

 

 

6.5、缓冲区溢出检测

对于栈内缓冲区溢出,只要溢出的部分没有覆盖到其他的栈变量,这次缓冲区溢出所造成的影响其实是处在控制之中的。这种类型的栈内缓冲区溢出既不会写坏栈中存储的敏感数据,在读到未初始化的填充字节时,这些未初始化的填充字节也能够被影子内存很好的跟踪。对于影响到了其他变量的栈内缓冲区溢出,是可以通过边界影子内存追踪到的。这对于保护栈中保存的敏感数据十分重要。

由于栈内存的分配只跟栈寄存器 SP 中保存的栈指针有关,所以只需要对跟踪被测程序中对栈寄存器 SP 的操作,比如 POP、PUSH、CALL 等指令,然后根据具体的指令语义对栈影子内存进行跟踪即可。

缓冲区溢出的另一个重灾区是危险函数的不当使用,比如在使用标准库中的 strcpy 函数时,缓冲区的检查是由程序员完成的,这很容易出现诸如缓冲区重叠、缓冲区溢出等错误。在 C++ 的标准库函数中有非常多的危险函数,如 gets、 printf 等等。这些危险函数也是造成缓冲区溢出以及导致某些安全漏洞的主要原因。由于这些危险函数一般都是通过动态链接库完成并且可以直接获取函数名字的,所以可以通过 DynamoRIO 的函数替换,使用包裹后的函数替换掉原来的危险函数,并且在新的函数中加入边界检査是一种非常方便的做法。这种方案不需要修改源代码并且重新编译原来的函数就能完成缓冲区溢出检测。这些函数的替换版本中増加的额外检測代码主要为 strcpy、 memcpy 增加边界检査,memcpy 增加缓冲区重叠的检査等等。

参考

硕士学位论文《基于二进制指令插桩的C++程序缺陷检测技术的研究与实现》—— 何磊

【DynamoRIO 入门教程】一:客户端的配置与编译 DynamoRIO 客户端 配置 编译 CMakeLists.txt 阅读详情

相关推荐

DynamoRIO工作原理

DynamoRIO是一个进程级别的emulation软件,工作在应用和操作系统之间。通过code caching, linking和 trace building提高了emulation的效率。

网络安全研究 1万+

DynamoRIO 系列三:List of Samples -- 示例的功能

drrun.exe DynamoRIO samples

Cherryuuuu 2498

AI论文智能摘要系统:面向工程师的结构化信息减负方案

技术文档摘要本质上是信息压缩与语义保真之间的平衡问题,其核心原理在于从高密度专业文本中精准提取可验证的技术要素、约束条件与实验上下文。在AI工程实践中,通用大模型端到端摘要常因忽略缩写消歧、公式语义、硬件依赖等关键细节而失效,导致复现失败或决策偏差。因此,真正可用的技术摘要必须具备结构化输出、多阶段校验和工作流嵌入能力,支撑算法工程师快速比对方法创新点、产品经理评估技术可行性、研究者建立领域认知图谱。本文聚焦AI领域论文的自动化摘要生成,深度融合PDF物理布局解析、动态缩写词表(DAD)、分治式AI协同与可

weixin_30814329的博客 382

从漏洞利用开发入门到精通:系统学习路径与实战指南

漏洞利用开发是网络安全领域的核心技术之一,它涉及将软件缺陷转化为可控执行流的过程。其原理基于对程序内存管理、CPU指令执行和操作系统机制的深刻理解,通过精心构造的输入数据实现代码执行或权限提升。这项技术的核心价值在于帮助安全人员深入理解攻击链,从而设计更有效的防御方案,并应用于渗透测试、漏洞研究、安全产品开发等场景。在实践层面,掌握系统底层原理、逆向工程、编程及漏洞缓解技术是构建完整知识体系的四大支柱。本文以栈溢出和堆溢出等常见漏洞类型为切入点,结合调试器与反汇编工具的使用,系统梳理了从基础到进阶的学习路线

diaomeijiao3430的博客 466

【信息科学与工程学】计算机科学与自动化——第一百九十八篇 高并发高可用的知识点01

以上补充约 110 行,涵盖分布式协调、服务网格细节、数据库高级特性、性能分析工具、混沌工程、安全渗透、合规审计、研发效能、新兴技术、架构模式、实用工具及经典论文。涵盖数据库索引与锁、NoSQL、前端性能、安全攻防、压测工具深入、监控深入、云原生存储、服务治理扩展、代码质量、DevOps 文化、行业标准、软技能及未来趋势。好的,继续补充更多高并发、高可用、高可靠的知识与技术,涵盖更深层的数据库内部机制、分布式事务、服务治理、运维自动化、安全与前沿技术等领域。

weixin_49199313的博客 730

插桩位置与代码执行分析

在软件开发和调试过程中,插桩技术(Instrumentation)是一种常用的方法,用于在程序执行期间在代码中插入特定的指令或代码片段,以便收集有关程序行为和性能的信息。在软件开发和调试过程中,插桩技术(Instrumentation)是一种常用的方法,用于在程序执行期间在代码中插入特定的指令或代码片段,以便收集有关程序行为和性能的信息。插桩位置的选择对于有效的代码执行分析至关重要。在上述示例代码中,通过在循环开始和结束处插入打印语句,我们可以观察循环的执行次数,并输出每次迭代的元素。

HackMasterX的博客 438

Python机器学习:从零基础到项目实战

当您翻开此书,您正踏入一场数据与智慧的修行。机器学习,并非冰冷的符码,而是机器模拟人类洞察世界的法门。本书将带您,以Python为舟,泛游于算法之海。我们不只传授“术”,更探求其后的“道”——从数据的生灭流转中观照规律,于模型的迭代演进里体悟得失。愿您合上书卷时,收获的不仅是驾驭数据的技能,更有一双洞悉复杂、化繁为简的“智慧之眼”。现在,让我们一同启程。

YunWisdom 966

生成式深度学习(第二版)-第一章-Conda环境下TensorFlow和Keras的安装和配置

按照书籍中的代码运行提示,需要配置Docker。个人的机器上正好有 conda4.14.0,索性就在本地环境进行配置。

GarryWang1248的博客 398

Dynamorio插桩工具的使用

首先,dynamorio的官网地址为Home下载页面地址为:本文章只讲linux下载和使用方式。

whisper211的博客 1515

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(四)-无人机系统(UAS)命令与控制(C2)通信用例

UTM向5G网络提供无人机系统C2通信所需的信息,例如服务类别、无人机系统服务的流量类型、授权的无人机系统服务所需的QoS以及无人机系统服务的订阅。遵循模型B的网络辅助C2模型,为了确保UAS操作的C2通信的服务可用性和可靠性,特别是当无人机在操作员的视线之外(BLOS)飞行时,为无人机提供支持冗余的C2通信链路。如果需要创建额外的C2通信连接或更改现有数据连接的配置以进行C2通信,则5G网络会根据无人机系统的授权服务信息和C2通信中所需的QoS和优先级,修改或分配一个或多个C2通信流量的QoS流。

u011376987的博客 2051

【目标跟踪】ECO算法论文阅读:ECO: Efficient Convolution Operators for Tracking

这里所指的训练集是指保存了每一帧的跟踪结果的训练集,也就是说,每一次进行model update的时候,要用在这一帧之前所有跟踪到的样本。那么随着视频越来越长,这个训练集就会越来越大。因为当目标被遮挡或者丢失的时候,比较新的这些样本本身就是错的,那么模型很容易有model drift,就是被背景或者错误的目标污染,导致跟踪结果出错。如下图所示,Baseline是传统的训练集,每更新一帧就加一个进来,那么连续的数帧后训练集里面的样本都是高度相似的,即容易遗忘前面的样本,且容易对最近的若干帧样本过拟合。

qq_43799400的博客 2610

DynamoRIO进阶指南

引用 这篇文章的目的是对动态二进制插桩框架DynamoRIO的原理和基本实现过程进行全面的介绍. 文章目录引用简介DynamoRIO源码流程入口点分析插桩循环分析插桩API回调分析路由逻辑分析函数间调用分析笔者demo分析DynamoRIO启动参数介绍相关项目 简介 动态二进制插桩框架DynamoRIO通过将程序代码进行反复插桩(Instrumentation)执行构建了源程序代码与操纵代码之间的桥梁,使DynamoRIO的客户端编写者能够在更高的层面上驾驭原有的程序代码.虽然程序的载体还是被编译成原生

如鹿渴慕泉水的专栏 3225

Rockchip rv1126平台在gstreamer1中添加OpenCv实现视频流负片的效果

rv1126 gstreamer opencv negetive effect

Aisy_D的专栏 1463

基于dynamorio自制反汇编小工具 instr_trace安装

对程序进行反汇编,然后打印出运行每个汇编时各个寄存器的值(类似于gdb单步调试,然后每一步都打印寄存器的值)

"my"的博客 925

光电容积脉搏波PPG信号分析笔记

脉搏波信号PPG分析笔记

teresa_zp的专栏 6477

基于QT的华为网络摄像头二次开发

第一次使用华为的网络摄像头并进行二次开发,网上关于QT对华为网络摄像头的二次开发的文章很少,基于项目的需求做了一些工作,特此记录。 目标: 1、实时预览 2、手动控制录制视频 3、监听告警型号 4、实时获取元数据中的划定区域内的人数 摄像头型号如下: 准备工作: 在购买摄像头后,应当在官网下载对应的开发资料,如果需要权限,则联系华为的技术支持人员。下载资料如下: SDC Development Kit Demo 8.0.T9 SDK DEMO下载地址:https://bbs.hua

xumingyifrend的博客 3168

插桩工具

DynamoRIO: 设计架构: 组件运转流程: DynamoRIO框架在操作系统和应用程序之间,构成一个中间层。在该中间层中DynamoRIO将CPU的寄存器做一份完整的镜像,并以此为被测程序构造出一份虚拟的上下文。在DynamoRIO框架下运行着的程序都会使用这份模拟出来的运行时上下文,同时通过DynamoRIO中的上下文切换模块代码即被投入运行之前在真实的宿主...

AlexYoung28的博客 6013

2025年11月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(二)

本文整理了2025年11月架构设计师考试的16-30题真题及解析,涵盖多个计算机系统知识领域。主要内容包括:Linux绝对路径以根目录开始(A);模块调用下层数量用扇出表示(B);游乐园问题通过集合运算得出10人未游玩(B);磁盘位示图计算为200字节(C);测试用例核心是输入与预期输出(D)。其他题目涉及软件可靠性测试概念(B错)、评价程序准确度排序(真实程序最高,A)、测试阶段顺序(单元→组装→系统,A)、Web服务器压力测试前置步骤(C)、分时系统响应时间影响因素(用户数量多,A)、逆向工程方法(基于

一几文的编程学习笔记。 222

源代码插桩是什么意思?如何执行这一操作?

程序插桩测试方法有效地提高了代码测试覆盖率,但是插桩测试方法会带来代码膨胀、执行效率低下和HeisenBugs,在一般情况下插桩后的代码膨胀率在20%~40%,甚至能达到100%导致插桩测试失败。实际开发软件测试中,这种缺陷也比较常见,例如,测试人员测试到一个缺陷提交给开发人员后,开发人员执行缺陷重现步骤却得不到报告的缺陷,因为缺陷已经消失或者出现了其他缺陷。源代码插桩是指对源文件进行完整的词法、语法分析后,确认插桩的位置,植入探针代相比于目标代码插桩,源代码插桩具有针对性和精确性。

zy1992As的博客 1810

【OpenClaw从入门到精通】第73篇:30天OpenClaw实战挑战——从零搭建个人数字助理(Day15-21)万字超详细高阶实战版

经过前两周的基础部署与功能搭建,你已拥有可自动化干活的AI助理与数字员工团队,但距离“高阶精通”仍有差距。本文聚焦第三周(Day15-21)核心实战,围绕安全审计、语音能力接入、Token成本控制、Agent Loop优化、One-Liner指令五大核心模块,结合真实落地案例与踩坑经验,提供超详细实操指南。通过本文,你将掌握生产级安全加固方案、语音交互全流程配置、低成本高性价比使用策略、Agent自主闭环优化技巧,以及一句话搞定复杂任务的高效指令用法,同时完成中期复盘与最后九天冲刺规划

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 362

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

DynamoRIO API介绍与工作机制

DynamoRIO 工作机制 翻译

Flyour的博客 4993

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

使用gdb打印寄存器和地址的值

目录一、文件介绍:1、源码2、目标文件test13、使用dynamorio工具生成的注释文件(后面简称它注释文件吧)二、使用gdb调试目标文件1、设置断点2、设置汇编格式为intel3、打开tui界面(汇编+c语言)4、run5、查看当前指令5、查看寄存器的值三、阅读一下mytest函数汇编四、作业:阅读一下mytest2函数的汇编,并且单步调试一下,观察数据的变化 一、文件介绍: 1、源码 #include <stdio.h> // 演示函数参数的传递过程 // 可以使用vscdoe调试,或

"my"的博客 3160

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

DynamoRIO(一)

接下来的项目要用到DynamoRIO,从今天开始学习,接下来把学习过程学到的知识和遇到的问题和大家分享一下,也作为备忘。 DynamoRIO下载地址:点击打开链接 DynamoRIO介绍: DynamoRIO是一个运行时代码控制系统(runtime code manipulation system),支持程序运行时对程序的任一部分进行修改。DynamoRIO给你对运行时代码流的完全控

lei_saint的专栏 5998

代码插桩【转载】

【转载】http://wiki.dzsc.com/info/5081.html   代码插桩是实现覆盖测试的关键技术之一,而高效的插桩技术对于嵌入式软件的测试来说又是至关重要的。在对CodeTeST 中插桩技术研究的基础上,以GCC 作为开发平台,应用并实现了新的插装器,采用增加一个词法语法分析器的方法,提高了插桩的效率。经过

adocn 5530

终极指南:如何掌握DynamoRIO动态二进制插桩技术

DynamoRIO是一款强大的动态二进制插桩平台,它允许开发者在程序运行时动态注入自定义代码,实现性能分析、安全检测和调试优化等功能。作为动态插桩领域的顶级工具,DynamoRIO能够在不修改源代码的情况下,对任意二进制程序进行深度监控和定制化处理。 ## 🚀 DynamoRIO核心架构解析 DynamoRIO的架构设计巧妙地将自身置于应用程序和操作系统之间,形成三层结构: [![Dyna

gitblog_01121的博客 447
上一篇: 【译】LLVM 的设计
下一篇: 代码优化利器 LTO 介绍
流左沙
博客等级 码龄11年 46粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值