发布网友 发布时间:2024-10-22 20:27
共1个回答
热心网友 时间:2024-10-25 00:19
本文分享了腾讯安全平台部在研发与测试工作中所遇到的代码插桩隔离需求,以及自研的动态插桩工具,旨在优化单元测试效能。市面上现有的C/C++插桩工具在使用上存在局限性,如gmock只能对C++的虚函数进行插桩替换,非虚函数和系统接口、第三方库代码的处理则受限。
基于此,团队提出了一种绕过编译器的底层插桩方法,直接修改机器指令,实现对任意函数的替换,不受语法和编译器约束。此方法在执行时,通过特定的机器码逻辑,将所有对原函数的调用直接转至替换函数,达到模拟效果。
该插桩工具可应用于第三方库、未完成模块、操作系统API等,不仅模拟原函数的返回值,还具有全面的操作能力,包括访问参数、成员变量、全局变量等。在实际实现中,工具需确保各测试用例间的互不干扰,支持函数替换和执行完毕后的还原操作。
工具提供了丰富的使用示例,包括对全局函数、普通成员函数、静态成员函数、虚函数及系统/第三方库函数的插桩。可见,无论针对何种类型函数,插桩过程与普通全局函数并无显著差异。
在使用时,需注意项目和注意事项。具体实现细节请参考项目地址:github.com/wangyongfeng...
持续改进是研效工具平台发展的关键,欢迎对优化测试效能感兴趣的读者与我们交流,共同推动技术研发。