diff options
author | bloodstalker <thabogre@gmail.com> | 2019-03-19 08:08:47 +0000 |
---|---|---|
committer | bloodstalker <thabogre@gmail.com> | 2019-03-19 08:08:47 +0000 |
commit | e08166f2d7acef41992c1b272bc5799a57344ac3 (patch) | |
tree | 31d8b5b3713413447a5da1bf682357b51062a2d8 | |
parent | cgrep synced (diff) | |
download | mutator-e08166f2d7acef41992c1b272bc5799a57344ac3.tar.gz mutator-e08166f2d7acef41992c1b272bc5799a57344ac3.zip |
updated to trunk 355787(llvm-clang 9.0). some more fixes to the codegen scripts for bruiser. the set methods are now working properly. i just have to figure out how I want to handle the get methods. the dev will be mostly on the codegen scripts side like for the past months for briser. if the builds returns weird results for tests or just in general, run make clean, get rid of the .depend files and rebuild again. I had that problem with obfuscator. the old compilation database was somehow bad.
-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 |