简述源代码插桩是在程序执行前还是执行后完成的?原因是什么?

简述源代码插桩是在程序执行前还是执行后完成的?原因是什么?,第1张

源代码插桩是在程序执行前完成的。这是因为源代码插桩需要在程序正式蠢友执行之前对代码进行修改,插入额外的代码逻辑,以实现特定的目的。如果插桩是在程序执行后完成,那么程序已经开始执行了,此时无法再绝渣对其代码进行修改。

在进行源代码插桩时,通常需要使用特定的工具或库,例如LLVM、Valgrind等。这些工具一般通过静态分析、抽象语法树(AST)等技术,在代码编译期间将插桩代码嵌入到源代码中。经过这些修改后的源代码,才会被编译成可以执行的二进制文件。

因此,源代码插桩必须在程序正式执行之前进行。在运行时进行代码修改或注入,通常是通过动态链接库或Hook技术实现,而不是通过源代并档悄码插桩完成的。

程序插桩,最早是由J.C. Huang 教授提出的,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。

由于程序插桩技术是在被测程序中插入探针,然后通过探针的执行来获得程序的控制流和数据流信息,以此来实现测试的目的。因此,根据探针插入的时间可以分为目标代码插桩和源代码插桩。

目标代码插桩的前提是对目标代码进行必要的分析以确定需要插桩的地点和内容。由于目标代码的格式主要和 *** 作系统相关,和具体的编程语言及版本无关猛弊,所以得到了广泛的应用,尤其是在需要对内存进行监控的软件中。但是由于目标代码中语法、语乱巧义信息不完整,而插桩技术需要对代码词法语法的分析有较高的要求,故在覆盖测试工具中多采用源代码插桩。

源代码插桩是在对源文件进行完整的词法分析和语法分析的基础上进行的,这就保证对源文件的插桩能够达到很高的准确度和针对性。但是源代码插桩需要接触到源代码,使得工作量较大,而且随着编码语言和版本的不同需要做一定的修改。在后面我们所提到的程序插桩均指源代码插桩。

程序插桩:是借助往被测程序中插入 *** 作,来实现测试目的的方法。 程序插桩的基本原理是在不破坏被测试程序原有逻辑完整性的前提下,在程序的相应位置上插入一些探针。这些探针本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用。通过探针的执行并输出程序的运行特征数哗知键据。基于对这些特征数据的分析,揭示程序的内部行为和特征。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12429698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存