forked from umnsec/mlta
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenCFG.sh
84 lines (63 loc) · 2.16 KB
/
genCFG.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/bash -e
# 1.编译kanalyzer and IRDumper ------------------------------------------------------------------
# 下载LLVM version: 15.0.0
ROOT=$(pwd)
if [ ! -d "llvm-project" ]; then
git clone [email protected]:llvm/llvm-project.git
fi
cd $ROOT/llvm-project
git checkout e758b77161a7
if [ ! -d "build" ]; then
mkdir build
fi
cd build
cmake -DLLVM_TARGET_ARCH="X86" \
-DLLVM_TARGETS_TO_BUILD="ARM;X86;AArch64" \
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="clang;lldb" \
-G "Unix Makefiles" \
../llvm
make -j6
if [ ! -d "$ROOT/llvm-project/prefix" ]; then
mkdir $ROOT/llvm-project/prefix
fi
cmake -DCMAKE_INSTALL_PREFIX=$ROOT/llvm-project/prefix -P cmake_install.cmake
# 修改mlta/src/lib/Config.h文件内的linux源目录文件
# define SOURCE_CODE_PATH "/path/to/linux"
cd $ROOT && make
cd IRDumper && make
# 2.构建bc文件 ----------------------------------------------------------------------------
# linux源文件绝对路径
KERNEL_SRC="/home/vscode/linux-5.1"
cd $ROOT
IRDUMPER="$(pwd)/IRDumper/build/lib/libDumper.so"
CLANG="$(pwd)/llvm-project/prefix/bin/clang"
KANALYZER="$ROOT/build/lib/kanalyzer"
# 编译内核配置信息
CONFIG="allnoconfig"
NEW_CMD="\n\n\
KBUILD_USERCFLAGS += -Wno-error -g -Xclang -no-opaque-pointers -Xclang -flegacy-pass-manager -Xclang -load -Xclang $IRDUMPER\nKBUILD_CFLAGS += -Wno-error -g -Xclang -no-opaque-pointers -Xclang -flegacy-pass-manager -Xclang -load -Xclang $IRDUMPER"
# 生成makefile的back文件,防止污染原makefile文件
cd $KERNEL_SRC
make clean
if [ ! -f "Makefile.bak" ]; then
cp Makefile Makefile.bak
fi
# 打印信息
echo $NEW_CMD >IRDumper.cmd
cat Makefile.bak IRDumper.cmd >Makefile
# 构建linux的config文件
make $CONFIG
# 构建linux的bc文件
make CC=$CLANG -j`nproc` -k -i
# 创建bc.list,用于存放所有的bc文件路径
cd $ROOT
if [ -f "$ROOT/bc.list" ]; then
rm bc.list
fi
touch bc.list
# 把所有的bc文件的路径放入到bc.list
find $KERNEL_SRC -name "*.bc" > bc.list
# 3.使用kanalyzer分析bc文件,结果放在result.txt --------------------------------------
$KANALYZER @bc.list 2> result.txt