静态代码扫描工具—— TScanCode

2023-11-09

一、简介


TscanCode支持以下类型规则扫描:

  1. 空指针检查,包含可疑的空指针;
  2. 数据越界;
  3. 内存泄漏,分配和释放不匹配;
  4. 逻辑错误,重复的代码分支,bool类型和INT进行比较,表达式永远True或者false等共18类检查;
  5. 可疑代码检查,if判断中含有可疑的=号;
  6. 运算错误,判断无符号数小于0,对bool类型进行++自增等,共计11类检查。

二、安装


(linux环境)进入代码仓库:https://github.com/Tencent/TscanCode, 克隆到本地(或者到码云镜像https://gitee.com/tyq123/TscanCode

$ git clone https://github.com/Tencent/TscanCode

1、直接使用编译好的执行文件,在release目录下:

       $ cd ./TscanCode-t/release/linux
              $ cd ./TscanCodeV2.14.24.linux/TscanCodeV2.14.2395.linux
              $ chmod a+x tscancode 

2、源码编译
              $ cd trunk/ 
              $ make 
              修改cfg/cfg.xml #cfg.xml 配置不当,可能导致检测结果为空,建议value="0"的再开启一些

代码安全静态扫描工具TscanCode支持多平台运行,包括Linux、Windows和mac版本,在Linux下可通过cfg/cfg.xml对扫描的规则进行配置,
其中通过设置value=0则禁用,value=1则启用。windows下是GUI,交互比较友好。

三、扫描过程


$ ./tscancode --xml --enable=all -q ${CODE_DIR} >scan_result.xml 2>&1

执行./tscancode 或 ./tscancode -h 可获得帮助信息

一些参数:

--enable=<id> all:检查所有    warning:检查warning级别的项目    unusedFunction:检查未使用函数 等

-I <dir> 指示头文件目录

-j <jobs> [jobs]个线程同时扫描

-q 静默模式

--xml 输出xml格式的扫描报告

示例:

$ export CODE_DIR=/data/your/code/dir/

$ ./tscancode --xml --enable=all -I $CODE_DIR/include $CODE_DIR/*.cpp 2>result.xml

处理过程:

 

分析过程:

 

检查过程:

 

普通文本格式扫描结果:

查看下具体代码:

上图的给指针pp直接置空有问题,内存泄漏了。然后关闭释放资源pp也有问题,因为pp为空指针了。

上图411行,对data2这个指针求长度,被认为是异常的,应该是求变量的长度。

等等...

 

一般开发时使用可能只需要知道行号即可,也可以用xml格式输出,查看问题代码上下文。

四、规则扩展


开源代码,可根据情况修改。

五、其他代码检查工具调研


1、cppcheck

Cppcheck是 用于C / C ++代码的静态分析工具。它提供独特的代码分析以检测错误,并专注于检测未定义的行为和危险的代码构造。目标是极少出现误报。

也有windows和linux版本,windows版为图形界面。

可通过sourceforge下载安装:wget https://master.dl.sourceforge.net/project/cppcheck/cppcheck/1.75/cppcheck-1.75.tar.gz

编译同样很简单:$ make

使用和tscancode很相似:$ ./cppcheck --enable=all /home/your/code/dir/*.cpp

但是得出的结论是,准确率没有比tscancode高,而且会有较多误报:不同函数里定义的同名变量,被认为是重复定义。

 

还有其他几款代码检查工具:pclint、coverity、clang等

以下来自网上技术文章中的对比信息:

https://blog.csdn.net/bandaoyu/article/details/108114456

准确率规则也分空指针、越界、变量为初始化、内存/资源泄漏、逻辑错误等规则,以上对比是综合评分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态代码扫描工具—— TScanCode 的相关文章

随机推荐

  • 微信网页开发分享

    首先提供一个微信官方地址点击打开链接 早期web项目中经常用到微信分享功能 现在整理一下 供记忆与分享 开发环境为JAVA H5 1 微信的开发环境不在多说 大概为 使用已备案的域名 设置 公众号设置 的三项域名 设置开发者密码 AppSe
  • Java直接杀死线程方法_如何杀死一个线程?

    1 简介 在这篇短文中 我们将讲述一下java中如果结束一个线程 事实上 这并没有想象中的那么简单 因为 Thread stop 方法已经被废弃啦 根据Oracle的解释 stop 方法可以导致被监视对象遭受破坏 2 使用一个Flag 我们
  • DWT数字水印算法(Python)

    DWT数字水印算法的基本原理 结合Arnold变换的基于DWT的数字水印的嵌入 充分利用了小波变换的特点 采用Haar小波 把原始图像及水印图像进行三级小波分解 然后在多分辨率分解后的频段嵌入水印信号 得到嵌入水印的图像 数字水印最重要的性
  • Keil5识别不到ST-Link的解决办法

    刚开始还以为是pack的问题 下载好多pack也没解决 后来发现其实是驱动的问题 从官网上下载驱动 之后进行基本的配置 如下所示 点击魔术棒标志 然后 然后 点击settings 点击add 添加自己的芯片类型 选择erase full c
  • 基于BERT模型实现文本分类任务(transformers+torch)

    BERT的原理分析可以看这 BERT Pre training of Deep Bidirectional Transformers for Language Understanding 论文笔记 代码实现主要用到huggingface的t
  • 如何保证MQ不丢失信息

    为了保证消息队列 MQ 不丢失信息 有以下几种方法可以考虑 增加冗余 通过将数据存储到多个不同的地方来防止数据丢失 使用持久化存储 通过将数据存储到磁盘上 而不是内存中 以确保数据不会丢失 引入数据备份 定期对数据进行备份 以防止意外数据丢
  • 二. go 常见控制结构实现原理之 select

    目录 一 基础问题 select 与channel select 与 channel 二 实现原理 1 select 底层结构 2 select选择case的执行逻辑 一 基础问题 select是Golang在语言层面提供的多路IO复用的机
  • Vue基础--组件的创建和使用

    一 组件化思想 一个页面中所有的处理概述逻辑全部放在一起 处理起来就会变得非常复杂 不利于后续的管理以及扩展 但是 我们将一个页面逻辑复杂的页面拆分成一个个小的功能块 每个功能块只完成属于自己这部分独立的功能 把大功能拆分成一个个小的功能
  • 51单片机0-9数字LED灯循环输出

    代码 include
  • 703n的OpenWrt配置一:安装和基本设置

    OpenWrt支持的路由可以从官网查到 顺藤摸瓜也可以找到固件的下载地址 如果知道路由器的cpu也可以从这里分类查找路由器型号 对于703n的ar71xx就是点我里面搜索703n找到的那几个文件 挑最小的固件下载 这样可以剩下更多空间安装其
  • 【C++】类的默认成员函数——构造函数、析构函数、拷贝构造函数、赋值运算符重载

    文章目录 一 前言 二 构造函数 1 基本概念 2 初始化列表 3 自动生成的构造函数 三 析构函数 1 基本概念 2 自动生成的析构函数 四 拷贝构造函数 1 基本概念 2 自动生成的拷贝构造函数 五 赋值运算符重载 1 基本概念 2 自
  • 全面剖析PMD静态代码扫描工具

    PMD是使用JavaCC生成解析器来解析源代码并生成AST 抽象语法树 的 这两天对PMD及自定义规则做了调研及实验 部分说明来自官方说明文档 做了大部分参数的详细描述及测试 少数几个参数不明白含义 有了解的朋友欢迎讨论 1 调研对象 pm
  • 如何连接安卓手机到mac并传文件

    平时你有没有需求将文件拖拽到安卓手机文件夹下呢 我最近就需要安装许多插件包到我的手机上 今天就记录下我是如何做这个事情的 本文纯属自己记录自己的学习过程 下面交代下步骤 1 mac端下载HandShaker 2 安装HandShaker包
  • 2.1.cuda驱动API-概述

    目录 前言 1 Driver API概述 2 补充知识 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程 之前有看过一遍 但是没有做笔记 很多东西也忘了 这次重新撸一遍 顺便记记笔记 本次课程学习精简 CUDA 教程 Dr
  • git rebase 合并提交与避免分叉合并

    本文让你熟练使用 rebase 学会以下两种操作 从此拒绝杂乱无章的 git 提交 目录 用法一 合并当前分支的多个commit记录 step1 找到想要合并的 commit 使用 rebase i step2 进入 Interact 交互
  • 阮一峰ES6 入门教程

    学习地址 https es6 ruanyifeng com
  • 书单(含资源链接,快撸!)

    撸资源 笨办法 学Python 第3版 https www jianshu com p 67a4827e88a1 Python 编写高质量Python代码的59个有效方法 https pan baidu com s 1vAw1R9bP5EC
  • 计算机视觉毕业后找不到工作怎么办?

    点击上方 视学算法 选择加 星标 置顶 重磅干货 第一时间送达 编辑 Amusi 来源 知乎 https www zhihu com question 335451320 本文仅作为学术分享 如果侵权 会删文处理 计算机视觉毕业后找不到工作
  • 使用tf-slim的ResNet V1 152和ResNet V2 152预训练模型进行图像分类

    本文使用tf slim的ResNet V1 152和ResNet V2 152预训练模型进行图像分类 并研究slim网络的scope命名等 tf slim文档不太多 实现过程中多参考官网的源码 https github com tensor
  • 静态代码扫描工具—— TScanCode

    一 简介 TscanCode支持以下类型规则扫描 空指针检查 包含可疑的空指针 数据越界 内存泄漏 分配和释放不匹配 逻辑错误 重复的代码分支 bool类型和INT进行比较 表达式永远True或者false等共18类检查 可疑代码检查 if