diff options
-rw-r--r-- | README.md | 2 | ||||
-rwxr-xr-x | bruiser/autogen/wasm/ft.sh | 3 | ||||
-rw-r--r-- | bruiser/autogen/wasm/ft/autowasm.c | 8 | ||||
-rw-r--r-- | bruiser/autogen/wasm/ft/makefile | 34 | ||||
-rw-r--r-- | bruiser/autogen/wasm/ltg/makefile | 2 | ||||
-rw-r--r-- | bruiser/bruiser.cpp | 51 | ||||
m--------- | bruiser/faultreiber | 0 | ||||
-rw-r--r-- | bruiser/lua-scripts/wasmtest.lua | 142 | ||||
m--------- | bruiser/tablegen | 0 | ||||
-rw-r--r-- | m0/mutator-lvl0.cpp | 68 | ||||
-rw-r--r-- | m0/mutator_aux.cpp | 2 | ||||
-rw-r--r-- | obfuscator/compile_commands.json | 7 |
12 files changed, 249 insertions, 70 deletions
@@ -175,7 +175,7 @@ Currently there is only the master branch which is the dev branch. All the as-of ### Building #### Requirements -* `LLVM/Clang` 5.0, 6.0 or 8.0(we will skip 7.0). For 8.0, the latest tested trunk version is 340121.<br/> +* `LLVM/Clang` 5.0, 6.0 or 8.0(we will skip 7.0). For 8.0, the latest tested trunk version is 355787.<br/> * `libffi`<br/> * `libcapstone`<br/> * `libkeystone`<br/> diff --git a/bruiser/autogen/wasm/ft.sh b/bruiser/autogen/wasm/ft.sh index a7f5ac6..71a4c20 100755 --- a/bruiser/autogen/wasm/ft.sh +++ b/bruiser/autogen/wasm/ft.sh @@ -1,5 +1,6 @@ #!/bin/sh cd $(dirname $0) "../../faultreiber/faultreiber.py" --name wasm --outdir ./ft/ --datetime --xml ./wasm.xml --calloc --voidtraininitsize 60 --voidtrainfactor 1.9 -#"clang-format" -i ./test/read.c ./test/structs.c ./test/structs.h ./test/aggregate.c ./test/aggregate.h ./test/read.h +#"../../faultreiber/faultreiber.py" --name wasm --outdir ./ft/ --datetime --xml ./wasm.xml --luaalloc --voidtraininitsize 60 --voidtrainfactor 1.9 --luaheaders ../../../lua-5.3.4/src +"clang-format" -i ./ft/read.c ./ft/structs.c ./ft/structs.h ./ft/aggregate.c ./ft/aggregate.h ./ft/read.h #"less" ./test/structs.h diff --git a/bruiser/autogen/wasm/ft/autowasm.c b/bruiser/autogen/wasm/ft/autowasm.c index 42bf474..617bd42 100644 --- a/bruiser/autogen/wasm/ft/autowasm.c +++ b/bruiser/autogen/wasm/ft/autowasm.c @@ -9,12 +9,14 @@ #include "./aggregate.h" #include "./read.h" #include "./structs.h" +#include "../../../lua-5.3.4/src/lua.h" #pragma weak main int main(int argc, char **argv) { const rlim_t kStackSize = 160 * 1024 * 1024; // min stack size = 16 MB struct rlimit rl; int result; + lua_State* LS = luaL_newstate(); result = getrlimit(RLIMIT_STACK, &rl); if (result == 0) { @@ -27,10 +29,10 @@ int main(int argc, char **argv) { } } int wasm = open("./test.wasm", O_RDONLY); - wasm_lib_ret_t *lib_ret = read_aggr_wasm(wasm); +#if 0 + wasm_lib_ret_t *lib_ret = read_aggr_wasm(wasm, LS); printf("finished reading\n"); -#if 0 printf("magic_number:%x\n", lib_ret->obj->magic_number_container->magic_number); printf("version:%x\n", lib_ret->obj->version_container->version); @@ -240,6 +242,7 @@ int main(int argc, char **argv) { // free(lib_ret->void_train[2]); // free(lib_ret->void_train[1]); // free(lib_ret->void_train[0]); +#if 0 for (int i = lib_ret->current_void_count - 1; i >= 0; --i) { printf("%d:0x%x ", i, lib_ret->void_train[i]); // if (i == 1) continue; @@ -248,5 +251,6 @@ int main(int argc, char **argv) { free(lib_ret->void_train); free(lib_ret->obj); free(lib_ret); +#endif return 0; } diff --git a/bruiser/autogen/wasm/ft/makefile b/bruiser/autogen/wasm/ft/makefile index b02dcfc..08e0ffe 100644 --- a/bruiser/autogen/wasm/ft/makefile +++ b/bruiser/autogen/wasm/ft/makefile @@ -1,13 +1,14 @@ +TARGET=autowasm SHELL=bash SHELL?=bash -TARGET=autowasm CC=clang CC?=clang -CC_FLAGS=-fpic +CC_FLAGS= -fPIC CC_EXTRA?= CTAGS_I_PATH?=./ LD_FLAGS= -EXTRA_LD_FLAGS?= +LIB_LUA=../../../lua-5.3.4/src/liblua.a +EXTRA_LD_FLAGS?=-lm -ldl ADD_SANITIZERS_CC= -g -fsanitize=address -fno-omit-frame-pointer ADD_SANITIZERS_LD= -g -fsanitize=address MEM_SANITIZERS_CC= -g -fsanitize=memory -fno-omit-frame-pointer @@ -62,8 +63,8 @@ depend:.depend .depend:$(SRCS) rm -rf .depend $(CC) -MM $(CC_FLAGS) $^ > ./.depend - echo $(patsubst %.o:, %.odbg:, $(shell $(CC) -MM $(CC_FLAGS) $^)) | sed -r 's/[a-z0-9\-\_]+\.odbg/\n&/g' >> ./.depend - echo $(patsubst %.o:, %.ocov:, $(shell $(CC) -MM $(CC_FLAGS) $^)) | sed -r 's/[a-z0-9\-\_]+\.ocov/\n&/g' >> ./.depend + echo $(patsubst %.o:, %.odbg:, $(shell $(CC) -MM $(CC_FLAGS) $^)) | sed -r 's/[A-Za-z0-9\-\_]+\.odbg/\n&/g' >> ./.depend + echo $(patsubst %.o:, %.ocov:, $(shell $(CC) -MM $(CC_FLAGS) $^)) | sed -r 's/[A-Za-z0-9\-\_]+\.ocov/\n&/g' >> ./.depend -include ./.depend @@ -76,16 +77,19 @@ depend:.depend %.ocov:%.c $(CC) $(CC_FLAGS) $(COV_CC) -c $< -o $@ -$(TARGET): $(TARGET).o read.o aggregate.o structs.o - $(CC) $^ $(LD_FLAGS) -o $@ +$(LIB_LUA): + $(MAKE) -C ../../../lua-5.3.4/src linux + +$(TARGET): $(TARGET).o $(LIB_LUA) read.o aggregate.o structs.o + $(CC) $(LD_FLAGS) $^ -o $@ -$(TARGET)-static: $(TARGET).o read.o aggregate.o structs.o +$(TARGET)-static: $(TARGET).o $(LIB_LUA) read.o aggregate.o structs.o $(CC) $^ $(LD_FLAGS) -static -o $@ -$(TARGET)-dbg: $(TARGET).odbg read.odbg aggregate.odbg structs.odbg +$(TARGET)-dbg: $(TARGET).odbg $(LIB_LUA) read.odbg aggregate.odbg structs.odbg $(CC) $^ $(LD_FLAGS) -g -o $@ -$(TARGET)-cov: $(TARGET).ocov read.ocov aggregate.ocov structs.ocov +$(TARGET)-cov: $(TARGET).ocov $(LIB_LUA) read.ocov aggregate.ocov structs.ocov $(CC) $^ $(LD_FLAGS) $(COV_LD) -o $@ cov: @@ -117,13 +121,13 @@ tags:$(SRCS) $(TARGET).so: $(TARGET).o read.o aggregate.o structs.o $(CC) $^ $(LD_FLAGS) -shared -o $@ -$(TARGET).a: $(TARGET).o read.o aggregate.o structs.o - ar rcs $(TARGET).a $(TARGET).o read.o aggregate.o structs.o +$(TARGET).a: $(LIB_LUA) read.o aggregate.o structs.o + ar rcs $(TARGET).a read.o aggregate.o structs.o -$(TARGET).adbg: $(TARGET).odbg read.odbg aggregate.odbg structs.odbg - ar rcs $(TARGET).adbg $(TARGET).odbg read.odbg aggregate.odbg structs.odbg +$(TARGET).adbg: $(LIB_LUA) read.odbg aggregate.odbg structs.odbg + ar rcs $(TARGET).adbg read.odbg aggregate.odbg structs.odbg -$(TARGET).acov: $(TARGET).ocov read.ocov aggregate.ocov structs.ocov +$(TARGET).acov: $(LIB_LUA) read.ocov aggregate.ocov structs.ocov ar rcs $(TARGET).acov $(TARGET).ocov read.ocov aggregate.ocov structs.ocov valgrind: $(TARGET) diff --git a/bruiser/autogen/wasm/ltg/makefile b/bruiser/autogen/wasm/ltg/makefile index e21fdaf..41d6c5a 100644 --- a/bruiser/autogen/wasm/ltg/makefile +++ b/bruiser/autogen/wasm/ltg/makefile @@ -56,7 +56,7 @@ LD_FLAGS+=$(EXTRA_LD_FLAGS) .PHONY:all clean help ASM SO TAGS -all: A ADBG +all:A ADBG everything:$(TARGET) A ASM SO $(TARGET)-static $(TARGET)-dbg TAGS $(TARGET)-cov diff --git a/bruiser/bruiser.cpp b/bruiser/bruiser.cpp index 6e73a44..7081b2b 100644 --- a/bruiser/bruiser.cpp +++ b/bruiser/bruiser.cpp @@ -1424,6 +1424,7 @@ class LuaWrapper { } PRINT_WITH_COLOR_LB(RED, "before"); wasm_lib_ret_t* lib_ret = read_aggr_wasm(wasm_file); + //wasm_lib_ret_t* lib_ret = read_aggr_wasm(wasm_file, __ls); PRINT_WITH_COLOR_LB(RED, "after"); close(wasm_file); @@ -1535,6 +1536,7 @@ class LuaWrapper { printf("data seg count:%d\n", lib_ret->obj->W_Data_Section_container->count); for (int i = 0; i < lib_ret->obj->W_Data_Section_container->count; ++i) { + printf("number:%d\n", i+1); printf("index:%d\n", lib_ret->obj->W_Data_Section_container->entries[i]->index); printf("size:%d\n", lib_ret->obj->W_Data_Section_container->entries[i]->size); printf("code:\n"); @@ -1564,7 +1566,7 @@ class LuaWrapper { new_magic_number(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "magic"); + PRINT_WITH_COLOR_LB(BLUE, "magic"); if (lib_ret->obj->w32_version_container != NULL) { lua_pushstring(__ls, "version"); @@ -1572,7 +1574,7 @@ class LuaWrapper { new_w32_version(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "version"); + PRINT_WITH_COLOR_LB(BLUE, "version"); if (lib_ret->obj->W_Type_Section_container != NULL) { lua_pushstring(__ls, "type_section"); @@ -1580,7 +1582,7 @@ class LuaWrapper { new_W_Type_Section(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "type section"); + PRINT_WITH_COLOR_LB(BLUE, "type section"); if (lib_ret->obj->W_Import_Section_container != NULL) { lua_pushstring(__ls, "import_section"); @@ -1588,7 +1590,7 @@ class LuaWrapper { new_W_Import_Section(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "import section"); + PRINT_WITH_COLOR_LB(BLUE, "import section"); if (lib_ret->obj->W_Function_Section_container != NULL) { lua_pushstring(__ls, "function_section"); @@ -1596,7 +1598,7 @@ class LuaWrapper { new_W_Function_Section(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "function section"); + PRINT_WITH_COLOR_LB(BLUE, "function section"); if (lib_ret->obj->W_Table_Section_container != NULL) { lua_pushstring(__ls, "table_section"); @@ -1604,7 +1606,7 @@ class LuaWrapper { new_W_Table_Section(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "table section"); + PRINT_WITH_COLOR_LB(BLUE, "table section"); if (lib_ret->obj->W_Memory_Section_container != NULL) { lua_pushstring(__ls, "memory_section"); @@ -1612,7 +1614,7 @@ class LuaWrapper { new_W_Memory_Section(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "memory section"); + PRINT_WITH_COLOR_LB(BLUE, "memory section"); if (lib_ret->obj->W_Global_Section_container != NULL) { lua_pushstring(__ls, "global_section"); @@ -1620,7 +1622,7 @@ class LuaWrapper { new_W_Global_Section(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "global section"); + PRINT_WITH_COLOR_LB(BLUE, "global section"); if (lib_ret->obj->W_Export_Section_container != NULL) { lua_pushstring(__ls, "export_section"); @@ -1628,7 +1630,7 @@ class LuaWrapper { new_W_Export_Section(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "export section"); + PRINT_WITH_COLOR_LB(BLUE, "export section"); if (lib_ret->obj->W_Start_Section_container != NULL) { lua_pushstring(__ls, "start_section"); @@ -1636,7 +1638,7 @@ class LuaWrapper { new_W_Start_Section(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "start section"); + PRINT_WITH_COLOR_LB(BLUE, "start section"); if (lib_ret->obj->W_Element_Section_container != NULL) { lua_pushstring(__ls, "element_section"); @@ -1644,15 +1646,38 @@ class LuaWrapper { new_W_Element_Section(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "element section"); + PRINT_WITH_COLOR_LB(BLUE, "element section"); if (lib_ret->obj->W_Code_Section_container != NULL) { lua_pushstring(__ls, "code_section"); W_Code_Section_push_args(__ls, lib_ret->obj->W_Code_Section_container); new_W_Code_Section(__ls); + lua_pushlightuserdata(__ls, lib_ret->obj->W_Code_Section_container); + lua_pushvalue(__ls, -2); + lua_settable(__ls, LUA_REGISTRYINDEX); +#if 1 + for (int ii = 0; ii < lib_ret->obj->W_Code_Section_container->count; ++ii) { + W_Function_Body_push_args(__ls, lib_ret->obj->W_Code_Section_container->bodies[ii]); + new_W_Function_Body(__ls); + lua_pushlightuserdata(__ls, lib_ret->obj->W_Code_Section_container->bodies[ii]); + lua_pushvalue(__ls, -2); + lua_settable(__ls, LUA_REGISTRYINDEX); + lua_pop(__ls, 1); + } +#endif lua_settable(__ls, -3); +#if 0 + for (int i = 0; i < lib_ret->obj->W_Code_Section_container->count; ++i) { + W_Function_Body_push_args(__ls, lib_ret->obj->W_Code_Section_container->bodies[i]); + new_W_Function_Body(__ls); + for (int j = 0; j < lib_ret->obj->W_Code_Section_container->bodies[i]->local_count; ++j) { + W_Local_Entry_push_args(__ls, lib_ret->obj->W_Code_Section_container->bodies[i]->locals[j]); + new_W_Local_Entry(__ls); + } + } +#endif } - //PRINT_WITH_COLOR_LB(BLUE, "code section"); + PRINT_WITH_COLOR_LB(BLUE, "code section"); if (lib_ret->obj->W_Data_Section_container != NULL) { lua_pushstring(__ls, "data_section"); @@ -1660,7 +1685,7 @@ class LuaWrapper { new_W_Data_Section(__ls); lua_settable(__ls, -3); } - //PRINT_WITH_COLOR_LB(BLUE, "data section"); + PRINT_WITH_COLOR_LB(BLUE, "data section"); if (lib_ret->obj->W_Custom_Section_container != NULL) { } return 1; diff --git a/bruiser/faultreiber b/bruiser/faultreiber -Subproject da65d18f0ebf28cb8a829a946d51d7111f6b493 +Subproject 29635ce7e1f3fa2e8aeb1c6b3938ab10786cad0 diff --git a/bruiser/lua-scripts/wasmtest.lua b/bruiser/lua-scripts/wasmtest.lua index b863081..c568b31 100644 --- a/bruiser/lua-scripts/wasmtest.lua +++ b/bruiser/lua-scripts/wasmtest.lua @@ -30,7 +30,6 @@ function libwasm.dump_import_section(a) io.write("count:"..tostring(a["import_section"]:count()).."\n") io.write("entries"..tostring(a["import_section"]:entries()).."\n") for k, v in pairs(a["import_section"]:entries()) do - --print(k, v, type(v)) io.write("module length:"..v:module_length().."\t") io.write("module str:"..v:module_str().."\t") io.write("field len:"..v:field_len().."\t") @@ -370,6 +369,98 @@ function libwasm.demo_setters(wasm_path) end --FIXME-entries + local entry1 = W_Import_Section_Entry() + local entry2 = W_Import_Section_Entry() + local entry3 = W_Import_Section_Entry() + local entry4 = W_Import_Section_Entry() + local kind0 = 12345 + local rsz = resizable_limit_t(111,222,333) + local rsz1 = resizable_limit_t(11,22,33) + local kind1 = table_type_t(10, rsz) + kind1:set_resizable_limit(rsz) + local kind2 = memory_type_t(rsz1) + kind2:set_resizable_limit(rsz1) + local kind3 = global_type_t(13,13) + + entry1:set_module_length(3) + entry1:set_module_str("env") + entry1:set_field_len(2) + entry1:set_field_str("ab") + entry1:set_kind(0) + entry1:set_type(kind0) + + entry2:set_module_length(3) + entry2:set_module_str("env") + entry2:set_field_len(3) + entry2:set_field_str("abc") + entry2:set_kind(1) + entry2:set_type(kind1) + + entry3:set_module_length(3) + entry3:set_module_str("env") + entry3:set_field_len(4) + entry3:set_field_str("abcd") + entry3:set_kind(2) + entry3:set_type(kind2) + + entry4:set_module_length(3) + entry4:set_module_str("env") + entry4:set_field_len(5) + entry4:set_field_str("abcde") + entry4:set_kind(3) + entry4:set_type(kind3) + + local entries = {} + entries[1] = entry1 + entries[2] = entry2 + entries[3] = entry3 + entries[4] = entry4 + + a["import_section"]:set_count(4) + pre = a["import_section"]:entries() + a["import_section"]:set_entries(entries) + post = a["import_section"]:entries() + + print(colors("%{red}".."start of import seciton entry contests for settter.")) + for k,v in pairs(a["import_section"]:entries()) do + print(k, v) + print("module_length: "..v:module_length()) + print("module_str: "..v:module_str()) + print("field_len: "..v:field_len()) + print("field_str: "..v:field_str()) + print("kind: "..v:kind()) + --print(v:type()) + --print(colors("%{green}"..type(v:type()).."\n")) + --[[ + if v:kind() == 0 then + v:set_type(54321) + print(v:type()) + end + ]]-- + if v:kind() == 1 then + --io.write(colors("%{blue}"..v:type():element_type().."\n")) + io.write(colors("%{blue}"..v:type():resizable_limit():flags().."\n")) + io.write(colors("%{blue}"..v:type():resizable_limit():initial().."\n")) + io.write(colors("%{blue}"..v:type():resizable_limit():maximum().."\n")) + end + if v:kind() == 2 then + io.write(colors("%{blue}"..v:type():resizable_limit():initial().."\n")) + io.write(colors("%{blue}"..v:type():resizable_limit():maximum().."\n")) + io.write(colors("%{blue}"..v:type():resizable_limit():flags().."\n")) + end + if v:kind() == 3 then + io.write(colors("%{blue}"..v:type():value_type().."\n")) + io.write(colors("%{blue}"..v:type():mutability().."\n")) + end + end + + if pre == post then + io.write(colors("%{red}".."import_section:entries:failure\n")) + else + io.write(colors("%{green}".."import_section:entries:pass\n")) + end + + print(colors("%{red}".."end of import seciton entry contests for settter.")) end end @@ -911,10 +1002,53 @@ function libwasm.demo_setters(wasm_path) end +--FIXME-fixed? +function libwasm.demo_setter_aux() + require("wasmextra") + local rsz = resizable_limit_t(111,222,333) + local zz = resizable_limit_t(11,22,33) + local kind1 = table_type_t(10, rsz) + local kind2 = memory_type_t(rsz) + local kind3 = global_type_t(1,1) + print(rsz:flags()) + print(rsz:initial()) + print(rsz:maximum()) + rsz:set_flags(100) + rsz:set_initial(200) + rsz:set_maximum(300) + print(rsz:flags()) + print(rsz:initial()) + print(rsz:maximum()) + + print(kind1:element_type()) + print(kind1:resizable_limit()) + kind1:set_element_type(17) + kind1:set_resizable_limit(zz) + print(kind1:element_type()) + print(kind1:resizable_limit()) + io.write(colors("%{blue}"..kind1:resizable_limit():initial().."\n")) + io.write(colors("%{blue}"..kind1:resizable_limit():maximum().."\n")) + io.write(colors("%{blue}"..kind1:resizable_limit():flags().."\n")) + + print(kind2:resizable_limit()) + kind2:set_resizable_limit(zz) + print(kind2:resizable_limit()) + print("max after set:"..kind2:resizable_limit():maximum()) + + print(kind3:value_type()) + print(kind3:mutability()) + kind3:set_value_type(0) + kind3:set_mutability(0) + print(kind3:value_type()) + print(kind3:mutability()) +end + +--libwasm.demo_setters("/home/bloodstalker/devi/hell2/bruiser/autogen/wasm/test/read.wasm") --libwasm.dev("/home/bloodstalker/devi/hell2/bruiser/autogen/wasm/ft/test.wasm") ---libwasm.demo_getters("/home/bloodstalker/extra/faultreiber/test/read.wasm") ---libwasm.demo_getters("/home/bloodstalker/devi/hell2/bruiser/autogen/wasm/test/read.wasm") -libwasm.demo_setters("/home/bloodstalker/devi/hell2/bruiser/autogen/wasm/ft/test.wasm") +libwasm.demo_getters("/home/bloodstalker/devi/hell2/bruiser/autogen/wasm/test/read.wasm") +--libwasm.demo_setters("/home/bloodstalker/devi/hell2/bruiser/autogen/wasm/ft/test.wasm") --libwasm.dump_all("/home/bloodstalker/devi/hell2/bruiser/autogen/wasm/ft/test.wasm") +--libwasm.dump_all("/home/bloodstalker/devi/hell2/bruiser/autogen/wasm/test/read.wasm") +--libwasm.demo_setter_aux() return libwasm diff --git a/bruiser/tablegen b/bruiser/tablegen -Subproject 47c85761f66dadd4e492a641fbd66893649ea83 +Subproject 4e1ea95b5e599c765fa8f3c634730ff9c9bd6ec diff --git a/m0/mutator-lvl0.cpp b/m0/mutator-lvl0.cpp index f6663dd..cdd625f 100644 --- a/m0/mutator-lvl0.cpp +++ b/m0/mutator-lvl0.cpp @@ -324,6 +324,7 @@ private: }; /**********************************************************************************************************************/ /**************************************************ASTMatcher Callbacks************************************************/ +#if 0 class [[deprecated("replaced by a more efficient class"), maybe_unused]] MCForCmpless : public MatchFinder::MatchCallback { public: MCForCmpless (Rewriter &Rewrite) : Rewrite (Rewrite) {} @@ -342,7 +343,9 @@ public: private: Rewriter &Rewrite; }; +#endif /**********************************************************************************************************************/ +#if 0 class [[deprecated("replaced by a more efficient class"), maybe_unused]] MCWhileCmpless : public MatchFinder::MatchCallback { public: MCWhileCmpless (Rewriter &Rewrite) : Rewrite (Rewrite) {} @@ -361,6 +364,7 @@ public: private: Rewriter &Rewrite; }; +#endif /**********************************************************************************************************************/ class MCElseCmpless : public MatchFinder::MatchCallback { public: @@ -4483,40 +4487,31 @@ public: } #endif - if (TypeIsUSignedInt) - { + if (TypeIsUSignedInt) { int64_t UnoFinal = 0; int64_t DousFinal = 0; bool MatchedUno = false; bool MatchedDous = false; /*@DEVI-compilers that actually treat post and pre inc or dec need more. this doesnt support that.*/ - if (MR.Nodes.getNodeAs<clang::UnaryOperator>("mcexpr1211uno") != nullptr) - { + if (MR.Nodes.getNodeAs<clang::UnaryOperator>("mcexpr1211uno") != nullptr) { MatchedUno = true; - const UnaryOperator* UO = MR.Nodes.getNodeAs<clang::UnaryOperator>("mcexpr1211uno"); - clang::UnaryOperator::Opcode UnoOpKind = UO->getOpcode(); - const Expr* UnoSubEXP = UO->getSubExpr(); - +#if __clang_major__ >= 9 + clang::Expr::EvalResult UnoResult; +#elif __clang_major__ < 9 llvm::APSInt UnoResult; - UnoFinal = UnoResult.getExtValue(); +#endif - if (UnoSubEXP->EvaluateAsInt(UnoResult, *ASTC)) - { - if (UnoOpKind == UO_PostInc || UnoOpKind == UO_PreInc) - { + if (UnoSubEXP->EvaluateAsInt(UnoResult, *ASTC)) { + if (UnoOpKind == UO_PostInc || UnoOpKind == UO_PreInc) { UnoFinal++; - } - else if (UnoOpKind == UO_PostDec || UnoOpKind == UO_PreDec) - { + } else if (UnoOpKind == UO_PostDec || UnoOpKind == UO_PreDec) { UnoFinal--; - } - else - { + } else { /*intentionally left blank. we cant get anything else. were only matching for these two unaryoperators.*/ } } @@ -4533,16 +4528,25 @@ public: const Expr* DousLHS = BO->getLHS(); const Expr* DousRHS = BO->getRHS(); +#if __clang_major__ >= 9 + clang::Expr::EvalResult DousLHSAPS; + clang::Expr::EvalResult DousRHSAPS; +#elif __clang_major__ < 9 llvm::APSInt DousLHSAPS; llvm::APSInt DousRHSAPS; +#endif if (DousLHS->EvaluateAsInt(DousLHSAPS, *ASTC) && DousRHS->EvaluateAsInt(DousRHSAPS, *ASTC)) { +#if __clang_major__ >= 9 + int64_t DousLHSInt64 = DousLHSAPS.Val.getInt().getExtValue(); + int64_t DousRHSInt64 = DousRHSAPS.Val.getInt().getExtValue(); +#elif __clang_major__ < 9 int64_t DousLHSInt64 = DousLHSAPS.getExtValue(); int64_t DousRHSInt64 = DousRHSAPS.getExtValue(); +#endif - switch (DousOpKind) - { + switch (DousOpKind) { case BO_Add: DousFinal = DousRHSInt64 + DousLHSInt64; break; @@ -4562,16 +4566,18 @@ public: } } +#if __clang_major__ >= 9 + clang::Expr::EvalResult OverflowCondidate; + EXP->EvaluateAsInt(OverflowCondidate, *ASTC); + int64_t IntExprValue = OverflowCondidate.Val.getInt().getExtValue(); +#elif __clang_major__ < 9 llvm::APSInt OverflowCondidate; - EXP->EvaluateAsInt(OverflowCondidate, *ASTC); - int64_t IntExprValue = OverflowCondidate.getExtValue(); +#endif - if ((MatchedDous && (DousFinal != IntExprValue)) || (MatchedUno && (UnoFinal != IntExprValue))) - { + if ((MatchedDous && (DousFinal != IntExprValue)) || (MatchedUno && (UnoFinal != IntExprValue))) { std::cout << "12.11" << ":" << "Constant Unsinged Expr evaluation resuslts in an overflow:" << SL.printToString(*MR.SourceManager) << ":" << IntExprValue << " " << DousFinal << " " << ":" << targetExpr << "\n"; - XMLDocOut.XMLAddNode(MR.Context, SL, "12.11", "Constant Unsinged Expr evaluation resuslts in an overflow:"); JSONDocOUT.JSONAddElement(MR.Context, SL, "12.11", "Constant Unsinged Expr evaluation resuslts in an overflow:"); } @@ -7052,7 +7058,7 @@ private: /**********************************************************************************************************************/ class MyASTConsumer : public ASTConsumer { public: - MyASTConsumer(Rewriter &R) : HandlerForCmpless(R), HandlerWhileCmpless(R), HandlerElseCmpless(R), HandlerIfCmpless(R), \ + MyASTConsumer(Rewriter &R) : HandlerElseCmpless(R), HandlerIfCmpless(R), \ HandlerForIfElse(R), HandlerForSwitchBrkLess(R), HandlerForSwitchDftLEss(R), HandlerForMCSwitch151(R), HandlerForMCSwitch155(R), \ HandlerForMCFunction161(R), HandlerForFunction162(R), HandlerForFunction164(R), HandlerForFunction166(R), HandlerForFunction168(R), \ HandlerForFunction169(R), HandlerForPA171(R), HandlerForSU184(R), HandlerForType6465(R), HandlerForDCDF81(R), HandlerForDCDF82(R), \ @@ -7071,8 +7077,8 @@ public: /*@DEVI-disables all matchers*/ #if defined(_MUT0_EN_MATCHERS) - Matcher.addMatcher(forStmt(unless(hasDescendant(compoundStmt()))).bind("mcfor"), &HandlerForCmpless); - Matcher.addMatcher(whileStmt(unless(hasDescendant(compoundStmt()))).bind("mcwhile"), &HandlerWhileCmpless); + //Matcher.addMatcher(forStmt(unless(hasDescendant(compoundStmt()))).bind("mcfor"), &HandlerForCmpless); + //Matcher.addMatcher(whileStmt(unless(hasDescendant(compoundStmt()))).bind("mcwhile"), &HandlerWhileCmpless); Matcher.addMatcher(ifStmt(allOf(hasElse(unless(ifStmt())), hasElse(unless(compoundStmt())))).bind("mcelse"), &HandlerElseCmpless); Matcher.addMatcher(ifStmt(unless(hasDescendant(compoundStmt()))).bind("mcif"), &HandlerIfCmpless); Matcher.addMatcher(ifStmt(allOf(hasElse(ifStmt()), unless(hasAncestor(ifStmt())), unless(hasDescendant(ifStmt(hasElse(unless(ifStmt()))))))).bind("mcifelse"), &HandlerForIfElse); @@ -7481,8 +7487,8 @@ public: } private: - MCForCmpless HandlerForCmpless; - MCWhileCmpless HandlerWhileCmpless; + //MCForCmpless HandlerForCmpless; + //MCWhileCmpless HandlerWhileCmpless; MCElseCmpless HandlerElseCmpless; MCIfCmpless HandlerIfCmpless; IfElseMissingFixer HandlerForIfElse; diff --git a/m0/mutator_aux.cpp b/m0/mutator_aux.cpp index b563bbe..9d2d4dc 100644 --- a/m0/mutator_aux.cpp +++ b/m0/mutator_aux.cpp @@ -45,7 +45,7 @@ SourceLocation SourceLocationHasMacro [[deprecated("doesnt work")]] (SourceLocat /*get the expansion range which is startloc and endloc*/ #if __clang_major__ <= 6 std::pair <SourceLocation, SourceLocation> expansionRange = Rewrite.getSourceMgr().getImmediateExpansionRange(SL); -#elif __clang_major__ == 8 +#elif __clang_major__ >= 8 CharSourceRange expansionRange = Rewrite.getSourceMgr().getImmediateExpansionRange(SL); #endif if (Kind == "start") { diff --git a/obfuscator/compile_commands.json b/obfuscator/compile_commands.json index 6fa5c24..d4fa21d 100644 --- a/obfuscator/compile_commands.json +++ b/obfuscator/compile_commands.json @@ -1,7 +1,12 @@ [ { - "command": "c++ -c -v -I/home/bloodstalker/extra/llvm-6/llvm/include -I/home/bloodstalker/extra/llvm-6/build/include -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -ffunction-sections -fdata-sections -O2 -fno-exceptions -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/bloodstalker/extra/llvm-6/llvm/tools/clang/include -I/home/bloodstalker/extra/llvm-6/build/tools/clang/include -std=c++1z -stdlib=libstdc++ -UNDEBUG -fexceptions -o obfuscator.o obfuscator.cpp", + "command": "c++ -c -fpic -I/home/bloodstalker/extra/llvm-clang-4/llvm/include -I/home/bloodstalker/extra/llvm-clang-4/build/include -std=c++11 -fno-exceptions -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/bloodstalker/extra/llvm-clang-4/llvm/tools/clang/include -I/home/bloodstalker/extra/llvm-clang-4/build/tools/clang/include -stdlib=libstdc++ -std=c++17 -fexceptions -o obfuscator.o obfuscator.cpp", "directory": "/home/bloodstalker/devi/hell2/obfuscator", "file": "/home/bloodstalker/devi/hell2/obfuscator/obfuscator.cpp" + }, + { + "command": "c++ -c -fpic -I/home/bloodstalker/extra/llvm-clang-4/llvm/include -I/home/bloodstalker/extra/llvm-clang-4/build/include -std=c++11 -fno-exceptions -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/bloodstalker/extra/llvm-clang-4/llvm/tools/clang/include -I/home/bloodstalker/extra/llvm-clang-4/build/tools/clang/include -stdlib=libstdc++ -std=c++17 -fexceptions -o ../m0/mutator_aux.o ../m0/mutator_aux.cpp", + "directory": "/home/bloodstalker/devi/hell2/obfuscator", + "file": "/home/bloodstalker/devi/hell2/m0/mutator_aux.cpp" } ]
\ No newline at end of file |