clang-query 的编译安装与使用示例

1,clang query 概述

作用:

检查一个程序源码的抽象语法树,测试 AST 匹配器;

帮助检查哪些 AST 节点与指定的 AST 匹配器相匹配;

2,clang-query 安装

准备:

bash 复制代码
git clone --recursive https://github.com/llvm/llvm-project.git
cd llvm-project/
git checkout  llvmorg-3.5.0
cp -r ./clang ./llvm/tools/
cp -r clang-tools-extra ./llvm/tools/clang/tools/extra
mkdir build_d ../local_d
cd build_d #其绝对路径为:/home/hipper/llvm_3_4_0_ex/browse/local_d,如下配置所用

配置:

bash 复制代码
cmake -G "Unix Makefiles"            \
-DCLANG_ENABLE_STATIC_ANALYZER=1     \
-DLLVM_ENABLE_ASSERTIONS=On          \
-DCMAKE_BUILD_TYPE=Debug             \
-DCMAKE_INSTALL_PREFIX=/home/hipper/llvm_3_4_0_ex/browse/local_d   \
-DLLVM_ENABLE_LIBCXX=1               \
-DLLVM_ENABLE_PROJECTS="all"         \
 ../llvm

编译安装:

bash 复制代码
make -j34
make install
cp bin/clang-query /home/hipper/llvm_3_4_0_ex/browse/local_d/bin/

3,测试运行

待测试程序源代码:

hello.c

cpp 复制代码
#if 0
#include <stdio.h>
#endif

#ifdef CAPITALIZE
#define WORLD "WORLD"
#else
#define WORLD "world"
#endif

extern int write(int, const char*, unsigned long);

int main(){
    write(1, "Hello, ", 7);
    write(1, WORLD, 5);
    write(1, "!\n", 2);
    return 0;

}

测试:

bash 复制代码
$ clang-query hello.c --

效果:

识别出函数调用表达式,并打印出来了

相关推荐
CYRUS_STUDIO5 小时前
C&C++ 代码安全再升级:用 OLLVM 给 so 加上字符串加密保护
c++·安全·llvm
CYRUS_STUDIO1 天前
别让 so 裸奔!移植 OLLVM 到 NDK 并集成到 Android Studio
android·android studio·llvm
CYRUS_STUDIO1 天前
OLLVM 移植 LLVM18 踩坑:一步步调试修复控制流平坦化
c语言·c++·llvm
CYRUS_STUDIO2 天前
LLVM 不止能编译!自定义 Pass + 定制 clang 实现函数名加密
c语言·c++·llvm
CYRUS_STUDIO2 天前
OLLVM 移植 LLVM 18 实战,轻松实现 C&C++ 代码混淆
c语言·c++·llvm
用户75389755281753 天前
《手写解释器》第7章 表达式求值
编译原理·编译器
CYRUS_STUDIO4 天前
LLVM 全面解析:NDK 为什么离不开它?如何亲手编译调试 clang
android·编译器·llvm
科技树支点5 天前
无GC的Java创新设计思路:作用域引用式自动内存管理
java·python·go·web·编程语言·编译器
得物技术8 天前
R8疑难杂症分析实战:外联优化设计缺陷引起的崩溃|得物技术
android·性能优化·编译器
展信佳_daydayup17 天前
02 基础篇-OpenHarmony 的编译工具
后端·面试·编译器