git-subtree-dir: Security Research and Development with LLVM - Andrew Reiter git-subtree-mainline: aa7a9fc1e16c3c5be7ba312c4b4e37775e005101 git-subtree-split: 0605b5174c2bc286d3e95d6c0df620800bef96c7
236 строки
7.2 KiB
Makefile
236 строки
7.2 KiB
Makefile
LLBIN=/usr/lib/llvm-3.9/bin
|
|
LLVM_CONFIG=$(LLBIN)/llvm-config
|
|
#QUIET:=@
|
|
QUIET:=
|
|
|
|
BUILDJSONCPP:=#
|
|
ifdef WITHJSONCPP
|
|
BUILDJSONCPP:=
|
|
endif
|
|
|
|
SRC_DIR?=$(PWD)/src
|
|
LDFLAGS+=$(shell $(LLVM_CONFIG) --ldflags) -Lthirdparty/jsoncpp-1.8.0/build/src/lib_json -ljsoncpp
|
|
|
|
COMMON_FLAGS=-Wall -Wextra -g
|
|
|
|
|
|
CXXFLAGS+=$(COMMON_FLAGS) $(shell $(LLVM_CONFIG) --cxxflags)
|
|
CPPFLAGS+=$(shell $(LLVM_CONFIG) --cppflags) -std=c++11 -I$(SRC_DIR) -Ithirdparty/jsoncpp-1.8.0/include
|
|
|
|
LOADABLE_MODULE_OPTIONS=-shared -Wl,-O1
|
|
|
|
LDIS=$(LLBIN)/llvm-dis
|
|
CPP=$(LLBIN)/clang++
|
|
CC=$(LLBIN)/clang
|
|
|
|
BOD=build/obj
|
|
PASSMGR=Comminute
|
|
OPM=build/bin/$(PASSMGR)
|
|
PASS=ComminuteShared.so
|
|
PASS_OBJECTS=Analysis/TargetCallSitesPass.o \
|
|
Analysis/StoreCollector.o \
|
|
Transform/FunctionExternalizer.o \
|
|
Transform/ChoosePhiValue.o \
|
|
Analysis/NaiveSensitiveDataLeak.o \
|
|
Analysis/NaiveFileDescLeak.o \
|
|
Analysis/PotentiallyDangerousScan.o \
|
|
Analysis/PotentiallyDangerousScanUserMethod.o \
|
|
Analysis/PotentiallyDangerousScanFunctionPass.o \
|
|
Analysis/NaiveConstantArgCheck.o
|
|
|
|
# XXX
|
|
# This is awful... Im just like "PUT IT ALL IN"
|
|
LIBS=$(shell $(LLVM_CONFIG) --libs) -lclang
|
|
LIBS+=-lpthread -ldl -lncurses -lz
|
|
|
|
TDIR=build/tests
|
|
|
|
default: prep $(PASS) passmgr
|
|
|
|
prep:
|
|
@echo "Prep phase"
|
|
$(QUIET)mkdir -p build/obj
|
|
$(QUIET)mkdir -p build/obj/Analysis
|
|
$(QUIET)mkdir -p build/obj/Transform
|
|
$(QUIET)mkdir -p build/bin
|
|
$(QUIET)mkdir -p build/lib
|
|
|
|
define builditdood
|
|
$(QUIET)$(CPP) -o $(BOD)/$(1)/$(@F) -c $(CPPFLAGS) $(CXXFLAGS) $<
|
|
endef
|
|
|
|
Transform/%.o: $(SRC_DIR)/Transform/%.cpp
|
|
@echo "Compiling $*.cpp"
|
|
$(call builditdood,Transform)
|
|
|
|
Analysis/%.o: $(SRC_DIR)/Analysis/%.cpp
|
|
@echo "Compiling $*.cpp"
|
|
$(call builditdood,Analysis)
|
|
|
|
%.o : $(SRC_DIR)/%.cpp
|
|
@echo "Compiling $*.cpp"
|
|
$(call builditdood,.)
|
|
|
|
passmgr:
|
|
@echo "Building passmanager clean up ldflags XXX"
|
|
$(QUIET)$(CPP) -o $(BOD)/Comminute.o -c $(CPPFLAGS) $(CXXFLAGS) src/Comminute.cpp
|
|
$(QUIET)$(CPP) -o $(OPM) $(CXXFLAGS) build/obj/Comminute.o ${addprefix $(BOD)/,$(PASS_OBJECTS)} $(LDFLAGS) $(LIBS)
|
|
|
|
|
|
$(PASS) : $(PASS_OBJECTS)
|
|
@echo "Linking $@"
|
|
$(QUIET)$(CPP) -o build/lib/$@ $(LOADABLE_MODULE_OPTIONS) $(CXXFLAGS) $(LDFLAGS) ${addprefix $(BOD)/,$^}
|
|
|
|
test: testprep testnca testnsdl testpd testnfdl
|
|
|
|
testprep:
|
|
$(QUIET)mkdir -p $(TDIR)
|
|
|
|
testnca:
|
|
$(QUIET)$(CC) -o $(TDIR)/NCA001 tests/NCA001.c
|
|
$(QUIET)$(CC) -g -emit-llvm -o $(TDIR)/NCA001.bc -c tests/NCA001.c
|
|
$(QUIET)$(LDIS) $(TDIR)/NCA001.bc
|
|
$(QUIET)$(CC) -o $(TDIR)/NCA002 tests/NCA002.c
|
|
$(QUIET)$(CC) -g -emit-llvm -o $(TDIR)/NCA002.bc -c tests/NCA002.c
|
|
$(QUIET)$(LDIS) $(TDIR)/NCA002.bc
|
|
|
|
testnsdl:
|
|
$(QUIET)$(CC) -o $(TDIR)/NSDL001 tests/NSDL001.c
|
|
$(QUIET)$(CC) -g -emit-llvm -o $(TDIR)/NSDL001.bc -c tests/NSDL001.c
|
|
$(QUIET)$(LDIS) $(TDIR)/NSDL001.bc
|
|
$(QUIET)$(CC) -o $(TDIR)/NSDL002 tests/NSDL002.c
|
|
$(QUIET)$(CC) -g -emit-llvm -o $(TDIR)/NSDL002.bc -c tests/NSDL002.c
|
|
$(QUIET)$(LDIS) $(TDIR)/NSDL002.bc
|
|
|
|
testpd:
|
|
$(QUIET)$(CC) -o $(TDIR)/PD001 tests/PD001.c
|
|
$(QUIET)$(CC) -g -emit-llvm -o $(TDIR)/PD001.bc -c tests/PD001.c
|
|
$(QUIET)$(LDIS) $(TDIR)/PD001.bc
|
|
|
|
testnfdl:
|
|
$(QUIET)$(CC) -o $(TDIR)/NFDL001 tests/NFDL001.c
|
|
$(QUIET)$(CC) -emit-llvm -o $(TDIR)/NFDL001.bc -c tests/NFDL001.c
|
|
$(QUIET)$(LDIS) $(TDIR)/NFDL001.bc
|
|
$(QUIET)$(CC) -o $(TDIR)/NFDL002 tests/NFDL002.c
|
|
$(QUIET)$(CC) -g -emit-llvm -o $(TDIR)/NFDL002.bc -c tests/NFDL002.c
|
|
$(QUIET)$(LDIS) $(TDIR)/NFDL002.bc
|
|
$(QUIET)$(CC) -o $(TDIR)/NFDL003 tests/NFDL003.c
|
|
$(QUIET)$(CC) -g -emit-llvm -o $(TDIR)/NFDL003.bc -c tests/NFDL003.c
|
|
$(QUIET)$(LDIS) $(TDIR)/NFDL003.bc
|
|
$(QUIET)$(CC) -o $(TDIR)/NFDL004 tests/NFDL004.c
|
|
$(QUIET)$(CC) -g -emit-llvm -o $(TDIR)/NFDL004.bc -c tests/NFDL004.c
|
|
$(QUIET)$(LDIS) $(TDIR)/NFDL004.bc
|
|
$(QUIET)$(CC) -o $(TDIR)/NFDL005 tests/NFDL005.c
|
|
$(QUIET)$(CC) -g -emit-llvm -o $(TDIR)/NFDL005.bc -c tests/NFDL005.c
|
|
$(QUIET)$(LDIS) $(TDIR)/NFDL005.bc
|
|
$(QUIET)$(CC) -o $(TDIR)/NFDL006 tests/NFDL006.c
|
|
$(QUIET)$(CC) -g -emit-llvm -o $(TDIR)/NFDL006.bc -c tests/NFDL006.c
|
|
$(QUIET)$(LDIS) $(TDIR)/NFDL006.bc
|
|
$(QUIET)$(CC) -o $(TDIR)/NFDL007 tests/NFDL007.c
|
|
$(QUIET)$(CC) -g -emit-llvm -o $(TDIR)/NFDL007.bc -c tests/NFDL007.c
|
|
$(QUIET)$(LDIS) $(TDIR)/NFDL007.bc
|
|
|
|
help:
|
|
@echo "make jsoncpp"
|
|
@echo "make "
|
|
@echo "...See build/"
|
|
@echo "make clean or make cleanall which requires jsoncpp rebuild"
|
|
@echo "make test"
|
|
@echo "make runtests"
|
|
@echo "make runconstantarg"
|
|
@echo "make runsensitiveleak"
|
|
@echo "make runfdleak"
|
|
@echo "make rundangerfn"
|
|
|
|
|
|
runtests: runconstantarg runsensitiveleak runfdleak rundangerfn
|
|
|
|
runconstantarg:
|
|
@echo "***"
|
|
@echo "*** Running: Naive constant arg on NCA001 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -naive-constant-arg $(TDIR)/NCA001.bc $(TDIR)/NCA001_out.bc
|
|
@echo "***"
|
|
@echo "*** Running: Naive constant arg on NCA002 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -naive-constant-arg $(TDIR)/NCA002.bc $(TDIR)/NCA002_out.bc
|
|
|
|
runsensitiveleak:
|
|
@echo "***"
|
|
@echo "*** Running: Naive sensitive leak on NSDL001 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -naive-sensitive-data-leak $(TDIR)/NSDL001.bc $(TDIR)/NSDL001_out.bc
|
|
$(QUIET)$(LDIS) $(TDIR)/NSDL001_out.bc
|
|
@echo "***"
|
|
@echo "*** Running: Naive sensitive leak on NSDL002 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -naive-sensitive-data-leak $(TDIR)/NSDL002.bc $(TDIR)/NSDL002_out.bc
|
|
$(QUIET)$(LDIS) $(TDIR)/NSDL002_out.bc
|
|
|
|
rundangerfn:
|
|
@echo "***"
|
|
@echo "*** Running: Potentially danger function on PD001 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -dangerous-function $(TDIR)/PD001.bc $(TDIR)/PD001_out.bc
|
|
@echo "***"
|
|
@echo "*** Running: Potentially danger function via user method on PD001 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -dangerous-function-user-method $(TDIR)/PD001.bc $(TDIR)/PD001_out-um.bc
|
|
@echo "***"
|
|
@echo "*** Running: Potentially danger function via function pass on PD001 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -dangerous-function-fpass $(TDIR)/PD001.bc $(TDIR)/PD001_out-fp.bc
|
|
|
|
runfdleak:
|
|
@echo "***"
|
|
@echo "*** Running: Naive file descriptor leak on NFDL001 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -naive-fd-leak $(TDIR)/NFDL001.bc $(TDIR)/NFDL001_out.bc
|
|
@echo "***"
|
|
@echo "*** Running: Naive file descriptor leak on NFDL002 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -naive-fd-leak $(TDIR)/NFDL002.bc $(TDIR)/NFDL002_out.bc
|
|
@echo "***"
|
|
@echo "*** Running: Naive file descriptor leak on NFDL003 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -naive-fd-leak $(TDIR)/NFDL003.bc $(TDIR)/NFDL003_out.bc
|
|
@echo "***"
|
|
@echo "*** Running: Naive file descriptor leak on NFDL004 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -naive-fd-leak $(TDIR)/NFDL004.bc $(TDIR)/NFDL004_out.bc
|
|
@echo "***"
|
|
@echo "*** Running: Naive file descriptor leak on NFDL005 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -naive-fd-leak $(TDIR)/NFDL005.bc $(TDIR)/NFDL005_out.bc
|
|
@echo "***"
|
|
@echo "*** Running: Naive file descriptor leak on NFDL006 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -naive-fd-leak $(TDIR)/NFDL006.bc $(TDIR)/NFDL006_out.bc
|
|
@echo "***"
|
|
@echo "*** Running: Naive file descriptor leak on NFDL007 ***"
|
|
@echo "***"
|
|
$(QUIET)$(OPM) -naive-fd-leak $(TDIR)/NFDL007.bc $(TDIR)/NFDL007_out.bc
|
|
|
|
|
|
# :^D
|
|
jsoncpp:
|
|
@echo "Building jsoncpp-1.8.0"
|
|
cd thirdparty && \
|
|
tar zxvf jsoncpp-1.8.0.tar.gz && \
|
|
cd jsoncpp-1.8.0 && \
|
|
rm -rf build && \
|
|
mkdir -p build && \
|
|
cd build && \
|
|
cmake .. && \
|
|
make && \
|
|
cd ../../
|
|
|
|
jsonclean:
|
|
$(QUIET)rm -rf thirdparty/jsoncpp-1.8.0
|
|
|
|
clean:
|
|
$(QUIET)rm -rf build tests/*.ll
|
|
|
|
cleanall: clean jsonclean
|
|
|