首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS 静态代码扫描之工具调研

然而iOS静态代码扫描工具有不少,它们都有什么不同?我应该选哪一个?因此,本文主要针对主流的几个工具,对同步助手的代码进行扫描,并分析对比它们的扫描结果,再敲定后续的接入计划。...2、clang Clang作为LLVM编译器框架的前端,最主要的任务是词法分析、语法分析,中间代码生成。...源代码通过clang语法分析后,生成了语法分析树(AST)后,可作为静态分析工具对AST进行分析。...Clang命令行调用方法: (1)下载clang:http://clang-analyzer.llvm.org/ (2)命令行cd到项目代码所在目录:$ cd /path (3)使用clang扫描,命令开头为...xcodebuild.log中,并使用xcpretty生成json文件: $xcodebuild analyze | tee xcodebuild.log | xcpretty --reportjson-compilation-database

6K10

IOS静态代码扫描--分析与总结

IOS静态代码扫描--分析与总结 为了进一步加强代码质量,规范并减少代码缺陷,静态代码扫描是上过环节中必不可少的一部分。大多数都希望通过不同的途径提前发现日常测试中难发现的问题。...然而iOS静态代码扫描工具有不少,它们都有什么不同?我应该选哪一个?因此,本文主要针对主流的几个工具,对同步助手的代码进行扫描,并分析对比它们的扫描结果,再敲定后续的接入计划。...2、clang Clang作为LLVM编译器框架的前端,最主要的任务是词法分析、语法分析,中间代码生成。...源代码通过clang语法分析后,生成了语法分析树(AST)后,可作为静态分析工具对AST进行分析。...Clang命令行调用方法: (1)下载clang: http://clang-analyzer.llvm.org/ (2)命令行cd到项目代码所在目录: $ cd /path (3)使用clang扫描,

4.8K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何通过静态分析提高iOS代码质量

    程序静态分析(Program Static Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术...对于OC语言的静态分析可以完全通过Clang,对于Swift的静态分析除了Clange还需要借助于SourceKit。...SwiftLint [1240] 对于Swift项目的静态分析可以使用SwiftLint。SwiftLint 是一个用于强制检查 Swift 代码风格和规定的一个工具。...它的实现是 Hook 了 Clang 和 SourceKit 从而能够使用 AST 来表示源代码文件的更多精确结果。Clange我们了解了,那SourceKit是干什么用的?...in Xcode Infer 的工作机制 LLVM & Clang 入门

    2.2K30

    Clang Static Analyzer

    关于Clang Static Analyzer Clang 静态分析器是一款源代码分析工具,可查找 C、C++ 和 Objective-C 程序中的错误。...静态分析器会拾取断言来修剪不可行的路径,这在某些情况下可以大大减少工具发出的误报(虚假错误报告)的数量。...ccc-analyzer程序就像一个假编译器,将其命令行参数转发给编译器以执行常规编译,并使用clang来执行静态分析。...=clang++ .. scan-build make CodeChecker 根据llvm官方描述,CodeChecker 得到了更积极的维护,提供了与流行编译器的多个版本一起使用的启发式方法,并且它还附带了一个基于...参考 https://clang.llvm.org/docs/ClangStaticAnalyzer.html https://clang-analyzer.llvm.org/ https://apt.llvm.org

    6200

    Hades:移动端静态分析框架

    基于编译器的静态分析方案 我们需求的本质是对代码进行分析,而在源代码编译过程中,语法分析器会创建出抽象语法树(Abstract Syntax Tree 缩写为 AST)。...对于 C/Objective-C 而言,主流编译器是 Clang/LLVM(Low Level Virtual Machine)的,它是一个开源的编译器架构,并被成功应用到多个应用领域。...对于 Objective-C ,分析过程不必强依赖于 xcodebuild 编译构建过程。...构建编译数据库 首先,Hades 是基于 Clang 的模块化设计开发,所以它可以独立运行,因此,可以利用 RubyGem 的方式将模型生成过程封装并提供命令行工具。...参考资料 1(https://clang.llvm.org/docs/LibTooling.html) 2(https://fbinfer.com/) 3(http://clang.llvm.org/extra

    2.9K30

    Hades:移动端静态分析框架

    基于编译器的静态分析方案 我们需求的本质是对代码进行分析,而在源代码编译过程中,语法分析器会创建出抽象语法树(Abstract Syntax Tree 缩写为 AST)。...对于 C/Objective-C 而言,主流编译器是 Clang/LLVM(Low Level Virtual Machine)的,它是一个开源的编译器架构,并被成功应用到多个应用领域。...更多细节内容可以前往 :clang.llvm.org 。 常用开源工具的不足 通过上一章节的介绍,我们大致了解了 Clang 的基本特点。...对于 Objective-C ,分析过程不必强依赖于 xcodebuild 编译构建过程。...构建编译数据库 首先,Hades 是基于 Clang 的模块化设计开发,所以它可以独立运行,因此,可以利用 RubyGem 的方式将模型生成过程封装并提供命令行工具。

    2.2K20

    现代CPU性能分析与优化-性能分析方法-静态性能分析

    对于 C 和 C++ 语言,我们有一些著名的工具,例如 Clang 静态分析器: https://clang-analyzer.llvm.org/、Klocwork: https://www.perforce.com...动态分析器 静态工具: 不运行实际代码,而是尝试模拟执行,尽可能保留微架构细节。它们无法进行实际测量(执行时间、性能计数器),因为它们不运行代码。...静态性能分析器的例子包括 UICA: https://uica.uops.info/2 和 llvm-mca: https://llvm.org/docs/CommandGuide/llvm-mca.html3...在右侧,我们展示了使用 -O3 -ffast-math -march=core-avx2 编译时 Clang-16 生成的循环的机器代码。汇编代码看起来非常紧凑,让我们更好地理解它。...这就是 Clang-16 所做的:它使用了 4 个向量寄存器(ymm2-ymm5),每个都包含 8 个浮点累加器,并使用 FMA 将乘法和加法融合成单个指令。常量 B 被广播到 ymm1 寄存器中。

    19211

    【AI系统】LLVM 前端和优化层

    这个阶段属于代码生成之前的过程,和硬件与目标无关,所以在前端的最后一个环节是 IR 的生成Clang 是一个强大的编译器工具,作为 LLVM 的前端承担着将 C、C++ 和 Objective-C 语言代码转换为...语法分析分组标记的目的是为了形成语法分析器(Syntactic Analyze)可以识别并验证其正确性的数据结构,最终构建出抽象语法树(AST)。...,并确保代码的类型正确。...语义分析器检查代码的类型是否符合语言的类型系统,并确保代码的语义正确。语义分析器的输出是类型无误的 AST,它是编译器后端的输入。...它们通常用于收集程序的信息或执行静态分析,以便其他 Pass 可以使用这些信息进行进一步的优化。分析 Pass 通常是只读的,不会修改程序代码。

    15510

    教程 | 编译器入门:没有siri的那些年,我们如何实现人机对话?

    (一些编译器将源代码转换为另一种编程语言,这些编译器被称为源到源转换器或转译器)。LLVM 是一个广泛使用的编译器项目,包括多个模块化的编译器工具。 传统的编译器设计包括三个部分: ?...前端将源代码转换成一种中间表示(IR)。clang (http://clang.llvm.org/) 是 LLVM 项目中 C 类语言的前端工具。 优化器解析 IR 并将其转换成一种更高效的形式。...Clang 由一个 C 预处理器、词法分析器(lexer)、解析器、语义分析器和中间表示生成器组成。 C 预处理器在源代码转换成 IR 之前对其进行修改。...在 compile_me.c 上运行 clang 前端,生成 LLVM IR: clang -S -emit-llvm -o llvm_ir.ll compile_me.c llvm_ir.ll 中的...优化器 优化器的任务是基于对程序运行时行为的理解,提升代码的效率。优化器的输入为 IR,输出为优化后的 IR。

    1.2K60

    转载:【AI系统】传统编译器发展

    此外配套的一些语言的分析工具:代码格式化工具:自动格式化代码,使代码符合固定格式,提高代码可读性。静态代码分析工具:编译期间运行,来检测出代码中的问题和漏洞。...如 Clang-tidy、rust-clippy、Clangd(LSP)、rust-analyzer(LSP)动态代码分析工具:运行时分析,比静态分析更能发现一些潜在的漏洞,诸如 C/C++ 的内存检测工具...虚拟机与优化一些高级编程语言(如 Java、Python、JavaScript)的运行,依赖于运行时(Runtime),并常常带有虚拟机(VM)和解释器。...接着在后端(back-end)使用 LLVM 编译成平台相关的机器语言。它的目标是提供一个 GNU 编译器套装(GCC)的替代品。Clang 课程包括 Clang 前端和 Clang 静态分析器等。...GCC 使用 Autotools 和 Make 作为构建工具,而 Clang/LLVM 使用 CMake。调试支持:GCC 有一个优秀的 GDB 调试器。GDB 历经时间考验,性能优异。

    10300

    如何持续的自我提升

    下面截取部分原文: “1.2 Module 化 1.2.1 基本概念 module:是一个编译单元,或构建产物,对一个软件库的结构化替代封装,供链接器使用(更多介绍请查阅 Clang-Module:https...://clang.llvm.org/docs/Modules.html#introduction) 二、思考 “思考 是一个主动消化知识的过程。...构建 通过 xcodebuild 命令,可以对 Host 进行构建。 如下,红框部分是 Xcode 执行 链接 Host 时,所调用的命令: ?...通过 Xcode 的链接环节,我们可以发现真正执行链接的二进制文件是 ld 通过搜索引擎查找“如何通过二进制文件找到对应的源码” 尝试编译链接器(遇到问题,可以通过网络引擎搜索解决) 运行链接器,并分析链接器的源码执行路径...注意: Xcode 的构建流程,笔者在上次分享的 llvm 编译器高级用法:第三方库插桩 有过简单介绍,后面会有更加详细的文章分享动态库、静态库、APP 的构建流程。

    73230

    【AI系统】传统编译器发展

    此外配套的一些语言的分析工具:代码格式化工具:自动格式化代码,使代码符合固定格式,提高代码可读性。静态代码分析工具:编译期间运行,来检测出代码中的问题和漏洞。...如 Clang-tidy、rust-clippy、Clangd(LSP)、rust-analyzer(LSP)动态代码分析工具:运行时分析,比静态分析更能发现一些潜在的漏洞,诸如 C/C++ 的内存检测工具...虚拟机与优化一些高级编程语言(如 Java、Python、JavaScript)的运行,依赖于运行时(Runtime),并常常带有虚拟机(VM)和解释器。...接着在后端(back-end)使用 LLVM 编译成平台相关的机器语言。它的目标是提供一个 GNU 编译器套装(GCC)的替代品。Clang 课程包括 Clang 前端和 Clang 静态分析器等。...GCC 使用 Autotools 和 Make 作为构建工具,而 Clang/LLVM 使用 CMake。调试支持:GCC 有一个优秀的 GDB 调试器。GDB 历经时间考验,性能优异。

    11610

    微信安全下一代特征计算引擎的探索与实践

    探索新引擎方案 C++执行引擎 微信后台主要使用C++作为编程语言,基础设施基本是以C++模块构建的,并积累了丰富的C++库。在安全业务中,一开始就选择了使用C++语言进行特征计算。...AST结构也可轻易地转换回源代码,因此Clang AST特别适合用于进行静态代码分析、代码重构等工作,方便在C/C++源代码层级上进行分析和修改。...CodeGen代码生成 CodeGen模块使用AST visitors以访问者模式(Visitor Pattern)遍历AST,然后使用IRBuilder类构建中间表示LLVM IR输出。...Clang开发示例 在探索Clang的过程中,本人收集和开发了一些Clang开发用例llvm-example,主要是AST的遍历和修改,可以通过GitHub获取代码,编译和运行。...节点的函数,如访问表达式VisitDecl和访问声明VisitDecl,都是可重写的函数: 示例中clang-funcnames实现了自定义的MyASTVisitor: 总结下一下,如果使用Clang进行静态代码分析

    28610

    我用 Rust 改写了自己的C++项目:这两个语言都很折磨人!

    我认为得满足以下几点: 很少或不用第三方依赖(标准库可以使用); 能在 Linux 和 macOS 上运行(我不怎么管 Windows 上的构建时间); 大量测试套组(不然我没法确定 Rust 代码的正确性...重写代码 至于要怎么重写这上千行的 C++ 代码,我选择按部就班: 找一个适合转换的模块; 复制黏贴代码、测试、搜索替换并修改部分语法、继续运行 cargo(Rust 的构建系统和包管理器)测试直到构建测测试都通过...的第二轮结果 传闻可以把 rustc 的后端从 LLVM 换成 Cranelift,于是我又用 rustc Cranelift 后端重新构建了一遍,-Zself-profile 结果看起来不错: 使用...上图中使用的多数选项都有文档可查,但我还没找到有人写过加 -s 的链接。子命令 -s 将包括 Rust 标准库静态链接在内的所有调试信息全部剥离,让链接器做更少的工作,从而减少链接时间。...我把最大的模块,也就是词法分析器的代码复制粘贴了 8、16 以及 24 遍,分别用来测试。因为我的基准里也包括了运行测试的时间,我觉得构建时间即使是对于那些能瞬间构建完的项目,也应该会线性增长。

    1.5K20

    【AI系统】LLVM 架构设计和原理

    在 2021 年 jetbrains 开发者调查中表示 GCC 编译器拥有 78%的用户使用率,Clang 编译器有 43% 的用户使用率。...例如,在 IR 中,目标指令集的函数调用惯例会被抽象为 call 和 ret 指令,并使用明确的参数。...根据 2011 年的测试结果,LLVM 的性能在运行时平均比 GCC 低 10%。2013 年的测试显示,LLVM 能够编译出与 GCC 性能相近的执行代码。...GCC:LLVM:LLVM IR 的优点包括:更独立:LLVM IR 设计为可在编译器之外的任意工具中重用,使得轻松集成其他类型的工具,如静态分析器和插桩器成为可能。...最后的两个步骤是将汇编代码汇编(assemble)成机器码文件,然后链接(link)生成可执行二进制文件,使其可以在特定平台上运行。

    20810
    领券