aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbloodstalker <thabogre@gmail.com>2018-06-24 06:16:22 +0000
committerbloodstalker <thabogre@gmail.com>2018-06-24 06:16:22 +0000
commit045e4e775c5d0ee2e7fd489cc3c236861fa5f004 (patch)
tree17a24b4f1d29e48f7c5b6db28927700d4e3bf186
parentfixes #43. the auto-gen source files by luatablegen dont look like source fil... (diff)
downloadmutator-045e4e775c5d0ee2e7fd489cc3c236861fa5f004.tar.gz
mutator-045e4e775c5d0ee2e7fd489cc3c236861fa5f004.zip
fixes 42, fixes 44
-rw-r--r--README.md15
-rw-r--r--bruiser/bruiser.cpp22
-rw-r--r--bruiser/lua-scripts/demo1.lua30
-rw-r--r--bruiser/lua-scripts/demo3.lua13
-rw-r--r--bruiser/lua-scripts/regtest.lua12
-rw-r--r--bruiser/lua-scripts/wasm.lua1
-rw-r--r--bruiser/lua-scripts/xobj.lua34
-rw-r--r--bruiser/luatablegen/W_Code_Section_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Data_Section_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Data_Segment_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Elem_Segment_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Element_Section_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Export_Section_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Function_Body_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Function_Section_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Global_Entry_tablegen.c4
-rw-r--r--bruiser/luatablegen/W_Global_Section_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Import_Section_Entry_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Import_Section_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Memory_Section_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Table_Section_tablegen.c2
-rw-r--r--bruiser/luatablegen/W_Type_Section_Entry_tablegen.c4
-rw-r--r--bruiser/luatablegen/W_Type_Section_tablegen.c2
-rw-r--r--bruiser/luatablegen/Wasm_Module_tablegen.c24
-rw-r--r--bruiser/luatablegen/memory_type_t_tablegen.c2
-rw-r--r--bruiser/luatablegen/table_type_t_tablegen.c2
-rw-r--r--bruiser/makefile4
-rwxr-xr-xbruiser/tablegen.sh2
-rw-r--r--bruiser/wasm/execute.py2
-rw-r--r--bruiser/wasm/init.py (renamed from bruiser/wasm/TBInit.py)2
-rw-r--r--bruiser/wasm/opcodes.py (renamed from bruiser/wasm/OpCodes.py)0
-rwxr-xr-xbruiser/wasm/parse.py4
-rw-r--r--bruiser/wasm/utils.py2
-rwxr-xr-xextra-tools/luatablegen.py27
34 files changed, 144 insertions, 90 deletions
diff --git a/README.md b/README.md
index d61d0bb..87ac1df 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,9 @@
- [Overview](#overview)
- [bruiser](#bruiser)
- - [load.py](#load.py)
+ - [delf](#delf)
+ - [dwasm](#dwasm)
+ - [luatablegen](#luatablegen)
- [obfuscator](#obfuscator)
- [m0](#m0)
- [Safercpp](#safercpp)
@@ -57,10 +59,17 @@ Essentially bruiser is a Lua REPL plus:
* Through the ASMRewriter functionality you can manipulate the machine code and push it back in the object. For more detail you can look at the wiki or check out bruiser's README.md.<br/>
* Luarocks: You can use your Luarocks modules/libraries in bruiser too. Just make sure `luarocks` is in your path and bruiser will take care of the rest.<br/>
-### load.py
-`load.py` is a custom ELF dump script developed for bruiser. bruiser uses it to interact with ELF files.<br/>
+### delf
+`delf` is a custom ELF dump script developed for bruiser. bruiser uses it to interact with ELF files.<br/>
You can also use the script as a standalone to dump info on the ELF file to stdout.<br/>
+### dwasm
+'dwasm' is a custom WASM dump script. bruiser uses it to interact with WASM object files.<br/>
+The script is also usable in an standalone manner.<br/>
+
+### luatablegen
+`luatablegen` is a python script that takes a json file including the details of a C structure, and generates C source and header files, a lua file including some convinience fields for the lua table and a markdown file including a summary of the table fields and their expected arg types and return types.<br/>
+
### obfuscator
Is a C/C++ source code obfuscator.<br/>
diff --git a/bruiser/bruiser.cpp b/bruiser/bruiser.cpp
index 7e6a22e..99f7731 100644
--- a/bruiser/bruiser.cpp
+++ b/bruiser/bruiser.cpp
@@ -1375,22 +1375,24 @@ class LuaWrapper
int BruiserPyLoader(lua_State* __ls ) {
int numargs = lua_gettop(__ls);
//std::string filename = "../bfd/load.py";
- std::string filename = "load";
+ //std::string filename = "load";
+ std::string filename;
std::string funcname;
std::string objjpath;
std::string action;
- if (numargs == 3) {
+ if (numargs == 4) {
if (Verbose) std::cout << CYAN << "got args." << NORMAL << "\n";
- funcname = lua_tostring(__ls, 1);
- if (funcname == "") PRINT_WITH_COLOR_LB(RED, "first argument is nil");
- objjpath = lua_tostring(__ls, 2);
- if (objjpath == "") PRINT_WITH_COLOR_LB(RED, "second argument is nil");
- action = lua_tostring(__ls, 3);
- if (action == "") PRINT_WITH_COLOR_LB(RED, "third argument is nil");
+ filename = lua_tostring(__ls, 1);
+ if (filename == "") PRINT_WITH_COLOR_LB(RED, "first argument is nil");
+ funcname = lua_tostring(__ls, 2);
+ if (funcname == "") PRINT_WITH_COLOR_LB(RED, "second argument is nil");
+ objjpath = lua_tostring(__ls, 3);
+ if (objjpath == "") PRINT_WITH_COLOR_LB(RED, "third argument is nil");
+ action = lua_tostring(__ls, 4);
+ if (action == "") PRINT_WITH_COLOR_LB(RED, "fourth argument is nil");
std::cout << NORMAL;
- }
- else {
+ } else {
std::cout << RED << "wrong number of arguments provided. should give the python script name, python func name and the return type.\n" << NORMAL;
return EXIT_FAILURE;
}
diff --git a/bruiser/lua-scripts/demo1.lua b/bruiser/lua-scripts/demo1.lua
index c0ee9fd..c349c36 100644
--- a/bruiser/lua-scripts/demo1.lua
+++ b/bruiser/lua-scripts/demo1.lua
@@ -20,8 +20,8 @@ elf_file = "/home/bloodstalker/devi/hell2/bfd/test/test.so"
function Demo1.getGlobalTable()
local return_table = {}
- local names = objload("elf_get_obj_names", elf_file, "symbol_list")
- local sizes = objload("elf_get_obj_sizes", elf_file, "bytes")
+ local names = objload("load", "elf_get_obj_names", elf_file, "symbol_list")
+ local sizes = objload("load", "elf_get_obj_sizes", elf_file, "bytes")
for i=1,#names,1 do
return_table[names[i]] = sizes[i]
end
@@ -29,28 +29,28 @@ function Demo1.getGlobalTable()
end
function Demo1.printObjNames()
- local c = objload("elf_get_obj_names", elf_file, "symbol_list")
+ local c = objload("load", "elf_get_obj_names", elf_file, "symbol_list")
for k,v in ipairs(c) do
print(k,v)
end
end
function Demo1.printObjSizes()
- local c = objload("elf_get_obj_sizes", elf_file, "bytes")
+ local c = objload("load", "elf_get_obj_sizes", elf_file, "bytes")
for k,v in ipairs(c) do
print(k,v)
end
end
function Demo1.printFuncNames()
- local c = objload("elf_get_func_names", elf_file, "symbol_list")
+ local c = objload("load", "elf_get_func_names", elf_file, "symbol_list")
for k,v in ipairs(c) do
print(k,v)
end
end
function Demo1.printFuncCode()
- local c = objload("elf_get_func_code", elf_file, "code_list")
+ local c = objload("load", "elf_get_func_code", elf_file, "code_list")
for k,v in ipairs(c) do
print(k,v)
if #v ~= 0 then
@@ -63,7 +63,7 @@ function Demo1.printFuncCode()
end
function Demo1.findMain()
- local c = objload("elf_get_func_names", elf_file, "symbol_list")
+ local c = objload("load", "elf_get_func_names", elf_file, "symbol_list")
for k,v in ipairs(c) do
if v == "main" then
io.write("main index is".." "..k.."\n")
@@ -74,8 +74,8 @@ end
function Demo1.codeTables()
local return_table = {}
- local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list")
- local code_table = objload("elf_get_func_code", elf_file, "code_list")
+ local func_name_table = objload("load", "elf_get_func_names", elf_file, "symbol_list")
+ local code_table = objload("load", "elf_get_func_code", elf_file, "code_list")
for i=1,#func_name_table,1 do
return_table[func_name_table[i]] = code_table[i]
end
@@ -84,8 +84,8 @@ end
function Demo1.codeTableByName(name)
local return_table = {}
- local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list")
- local code_table = objload("elf_get_func_code", elf_file, "code_list")
+ local func_name_table = objload("load", "elf_get_func_names", elf_file, "symbol_list")
+ local code_table = objload("load", "elf_get_func_code", elf_file, "code_list")
for k,v in ipairs(func_name_table) do
if v == name then
for k1, v1 in ipairs(code_table[k]) do
@@ -99,8 +99,8 @@ end
function Demo1.codeTableByName_number(name)
local return_table = {}
- local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list")
- local code_table = objload("elf_get_func_code", elf_file, "code_list")
+ local func_name_table = objload("load", "elf_get_func_names", elf_file, "symbol_list")
+ local code_table = objload("load", "elf_get_func_code", elf_file, "code_list")
for k,v in ipairs(func_name_table) do
if v == name then
for k1, v1 in ipairs(code_table[k]) do
@@ -113,8 +113,8 @@ function Demo1.codeTableByName_number(name)
end
function Demo1.printFuncSizes()
- local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list")
- local code_table = objload("elf_get_func_code", elf_file, "code_list")
+ local func_name_table = objload("load", "elf_get_func_names", elf_file, "symbol_list")
+ local code_table = objload("load", "elf_get_func_code", elf_file, "code_list")
local counter = 1
print("function sizes:")
for k, v in ipairs(code_table) do
diff --git a/bruiser/lua-scripts/demo3.lua b/bruiser/lua-scripts/demo3.lua
new file mode 100644
index 0000000..89dde81
--- /dev/null
+++ b/bruiser/lua-scripts/demo3.lua
@@ -0,0 +1,13 @@
+
+local demo3 = {}
+
+function demo3.init()
+ local wasm = require("wasm")
+ local wasm_file = "../wasm/test/injected.wasm"
+ local wasm_module = Wasm_Module()
+ local table_type = table_type_t()
+ local resizable_limit = resizable_limit_t()
+ table_type:set_resizable_limit(resizable_limit)
+end
+
+return demo3
diff --git a/bruiser/lua-scripts/regtest.lua b/bruiser/lua-scripts/regtest.lua
new file mode 100644
index 0000000..f7ec461
--- /dev/null
+++ b/bruiser/lua-scripts/regtest.lua
@@ -0,0 +1,12 @@
+
+-- luarocks install luaposix
+--local posix = require("posix")
+
+function reg_test()
+ local demo1 = require("demo1")
+ local demo2 = require("demo2")
+ local demo3 = require("asmtest")
+ print("yo")
+end
+
+reg_test()
diff --git a/bruiser/lua-scripts/wasm.lua b/bruiser/lua-scripts/wasm.lua
index 3c94960..88588a6 100644
--- a/bruiser/lua-scripts/wasm.lua
+++ b/bruiser/lua-scripts/wasm.lua
@@ -20,7 +20,6 @@ setmetatable(resizable_limit_t, {__call =
setmetatable(global_type_t, {__call =
function(self, arg0, arg1)
local t = self.new(arg0, arg1)
- print("created",t)
return t
end
}
diff --git a/bruiser/lua-scripts/xobj.lua b/bruiser/lua-scripts/xobj.lua
index 08a2945..a4f7a8d 100644
--- a/bruiser/lua-scripts/xobj.lua
+++ b/bruiser/lua-scripts/xobj.lua
@@ -26,8 +26,8 @@ end
function xobj.getGlobalTable()
local return_table = {}
- local names = objload("elf_get_obj_names", elf_file, "symbol_list")
- local sizes = objload("elf_get_obj_sizes", elf_file, "symbol_list")
+ local names = objload("load", "elf_get_obj_names", elf_file, "symbol_list")
+ local sizes = objload("load", "elf_get_obj_sizes", elf_file, "symbol_list")
for i=1,#names,1 do
return_table[names[i]] = sizes[i]
end
@@ -35,28 +35,28 @@ function xobj.getGlobalTable()
end
function xobj.printObjNames()
- local c = objload("elf_get_obj_names", elf_file, "symbol_list")
+ local c = objload("load", "elf_get_obj_names", elf_file, "symbol_list")
for k,v in ipairs(c) do
print(k,v)
end
end
function xobj.printObjSizes()
- local c = objload("elf_get_obj_sizes", elf_file, "symbol_list")
+ local c = objload("load", "elf_get_obj_sizes", elf_file, "symbol_list")
for k,v in ipairs(c) do
print(k,v)
end
end
function xobj.printFuncNames()
- local c = objload("elf_get_func_names", elf_file, "symbol_list")
+ local c = objload("load", "elf_get_func_names", elf_file, "symbol_list")
for k,v in ipairs(c) do
print(k,v)
end
end
function xobj.printFuncCode()
- local c = objload("elf_get_func_code", elf_file, "code_list")
+ local c = objload("load", "elf_get_func_code", elf_file, "code_list")
for k,v in ipairs(c) do
print(k,v)
if #v ~= 0 then
@@ -69,7 +69,7 @@ function xobj.printFuncCode()
end
function xobj.findMain()
- local c = objload("elf_get_func_names", elf_file, "symbol_list")
+ local c = objload("load", "elf_get_func_names", elf_file, "symbol_list")
for k,v in ipairs(c) do
if v == "'main'" then
io.write("main index is".." "..k.."\n")
@@ -80,8 +80,8 @@ end
function xobj.codeTables()
local return_table = {}
- local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list")
- local code_table = objload("elf_get_func_code", elf_file, "code_list")
+ local func_name_table = objload("load", "elf_get_func_names", elf_file, "symbol_list")
+ local code_table = objload("load", "elf_get_func_code", elf_file, "code_list")
for i=1,#func_name_table,1 do
return_table[func_name_table[i]] = code_table[i]
end
@@ -90,8 +90,8 @@ end
function xobj.codeTableByName(name)
local return_table = {}
- local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list")
- local code_table = objload("elf_get_func_code", elf_file, "code_list")
+ local func_name_table = objload("load", "elf_get_func_names", elf_file, "symbol_list")
+ local code_table = objload("load", "elf_get_func_code", elf_file, "code_list")
for k,v in ipairs(func_name_table) do
if v == name then
for k1, v1 in ipairs(code_table[k]) do
@@ -105,8 +105,8 @@ end
function xobj.codeTableByName_number(name)
local return_table = {}
- local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list")
- local code_table = objload("elf_get_func_code", elf_file, "code_list")
+ local func_name_table = objload("load", "elf_get_func_names", elf_file, "symbol_list")
+ local code_table = objload("load", "elf_get_func_code", elf_file, "code_list")
for k,v in ipairs(func_name_table) do
if v == name then
for k1, v1 in ipairs(code_table[k]) do
@@ -119,8 +119,8 @@ function xobj.codeTableByName_number(name)
end
function xobj.printFuncSizes()
- local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list")
- local code_table = objload("elf_get_func_code", elf_file, "code_list")
+ local func_name_table = objload("load", "elf_get_func_names", elf_file, "symbol_list")
+ local code_table = objload("load", "elf_get_func_code", elf_file, "code_list")
local counter = 1
print("function sizes:")
for k, v in ipairs(code_table) do
@@ -130,11 +130,11 @@ function xobj.printFuncSizes()
end
function xobj.getTextSection(elf_exe)
- return objload("elf_get_text_section", elf_exe, "bytes")
+ return objload("load", "elf_get_text_section", elf_exe, "bytes")
end
function xobj.getRODataSection(elf_exe)
- return objload("elf_get_rodata_section", elf_exe, "bytes")
+ return objload("load", "elf_get_rodata_section", elf_exe, "bytes")
end
function xobj.CSDump(code)
diff --git a/bruiser/luatablegen/W_Code_Section_tablegen.c b/bruiser/luatablegen/W_Code_Section_tablegen.c
index 1c516ce..b4bd190 100644
--- a/bruiser/luatablegen/W_Code_Section_tablegen.c
+++ b/bruiser/luatablegen/W_Code_Section_tablegen.c
@@ -69,7 +69,7 @@ static int setter_W_Code_Section_count(lua_State* __ls) {
}
static int setter_W_Code_Section_bodies(lua_State* __ls) {
W_Code_Section* dummy = check_W_Code_Section(__ls, 1);
- dummy->bodies = luaL_checkudata(__ls, 2, "W_Code_Section");
+ dummy->bodies = luaL_checkudata(__ls, 2, "bodies_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Data_Section_tablegen.c b/bruiser/luatablegen/W_Data_Section_tablegen.c
index 3dbc98b..9426e71 100644
--- a/bruiser/luatablegen/W_Data_Section_tablegen.c
+++ b/bruiser/luatablegen/W_Data_Section_tablegen.c
@@ -69,7 +69,7 @@ static int setter_W_Data_Section_count(lua_State* __ls) {
}
static int setter_W_Data_Section_entries(lua_State* __ls) {
W_Data_Section* dummy = check_W_Data_Section(__ls, 1);
- dummy->entries = luaL_checkudata(__ls, 2, "W_Data_Section");
+ dummy->entries = luaL_checkudata(__ls, 2, "entries_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Data_Segment_tablegen.c b/bruiser/luatablegen/W_Data_Segment_tablegen.c
index 20b2762..1fbac4d 100644
--- a/bruiser/luatablegen/W_Data_Segment_tablegen.c
+++ b/bruiser/luatablegen/W_Data_Segment_tablegen.c
@@ -87,7 +87,7 @@ static int setter_W_Data_Segment_index(lua_State* __ls) {
}
static int setter_W_Data_Segment_offset(lua_State* __ls) {
W_Data_Segment* dummy = check_W_Data_Segment(__ls, 1);
- dummy->offset = luaL_checkudata(__ls, 2, "W_Data_Segment");
+ dummy->offset = luaL_checkudata(__ls, 2, "offset_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Elem_Segment_tablegen.c b/bruiser/luatablegen/W_Elem_Segment_tablegen.c
index 82f8a30..a9ae97d 100644
--- a/bruiser/luatablegen/W_Elem_Segment_tablegen.c
+++ b/bruiser/luatablegen/W_Elem_Segment_tablegen.c
@@ -87,7 +87,7 @@ static int setter_W_Elem_Segment_index(lua_State* __ls) {
}
static int setter_W_Elem_Segment_offset(lua_State* __ls) {
W_Elem_Segment* dummy = check_W_Elem_Segment(__ls, 1);
- dummy->offset = luaL_checkudata(__ls, 2, "W_Elem_Segment");
+ dummy->offset = luaL_checkudata(__ls, 2, "offset_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Element_Section_tablegen.c b/bruiser/luatablegen/W_Element_Section_tablegen.c
index 93e545b..b00b7fc 100644
--- a/bruiser/luatablegen/W_Element_Section_tablegen.c
+++ b/bruiser/luatablegen/W_Element_Section_tablegen.c
@@ -69,7 +69,7 @@ static int setter_W_Element_Section_count(lua_State* __ls) {
}
static int setter_W_Element_Section_entries(lua_State* __ls) {
W_Element_Section* dummy = check_W_Element_Section(__ls, 1);
- dummy->entries = luaL_checkudata(__ls, 2, "W_Element_Section");
+ dummy->entries = luaL_checkudata(__ls, 2, "entries_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Export_Section_tablegen.c b/bruiser/luatablegen/W_Export_Section_tablegen.c
index fbd2538..3ec02c8 100644
--- a/bruiser/luatablegen/W_Export_Section_tablegen.c
+++ b/bruiser/luatablegen/W_Export_Section_tablegen.c
@@ -69,7 +69,7 @@ static int setter_W_Export_Section_count(lua_State* __ls) {
}
static int setter_W_Export_Section_entries(lua_State* __ls) {
W_Export_Section* dummy = check_W_Export_Section(__ls, 1);
- dummy->entries = luaL_checkudata(__ls, 2, "W_Export_Section");
+ dummy->entries = luaL_checkudata(__ls, 2, "entries_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Function_Body_tablegen.c b/bruiser/luatablegen/W_Function_Body_tablegen.c
index 173c381..59a6a10 100644
--- a/bruiser/luatablegen/W_Function_Body_tablegen.c
+++ b/bruiser/luatablegen/W_Function_Body_tablegen.c
@@ -93,7 +93,7 @@ static int setter_W_Function_Body_local_count(lua_State* __ls) {
}
static int setter_W_Function_Body_locals(lua_State* __ls) {
W_Function_Body* dummy = check_W_Function_Body(__ls, 1);
- dummy->locals = luaL_checkudata(__ls, 2, "W_Function_Body");
+ dummy->locals = luaL_checkudata(__ls, 2, "locals_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Function_Section_tablegen.c b/bruiser/luatablegen/W_Function_Section_tablegen.c
index ebc249d..a2de6b6 100644
--- a/bruiser/luatablegen/W_Function_Section_tablegen.c
+++ b/bruiser/luatablegen/W_Function_Section_tablegen.c
@@ -69,7 +69,7 @@ static int setter_W_Function_Section_count(lua_State* __ls) {
}
static int setter_W_Function_Section_types(lua_State* __ls) {
W_Function_Section* dummy = check_W_Function_Section(__ls, 1);
- dummy->types = luaL_checkudata(__ls, 2, "W_Function_Section");
+ dummy->types = luaL_checkudata(__ls, 2, "types_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Global_Entry_tablegen.c b/bruiser/luatablegen/W_Global_Entry_tablegen.c
index 9b87c0f..0259cd6 100644
--- a/bruiser/luatablegen/W_Global_Entry_tablegen.c
+++ b/bruiser/luatablegen/W_Global_Entry_tablegen.c
@@ -63,13 +63,13 @@ static int getter_W_Global_Entry_init(lua_State* __ls) {
static int setter_W_Global_Entry_type(lua_State* __ls) {
W_Global_Entry* dummy = check_W_Global_Entry(__ls, 1);
- dummy->type = luaL_checkudata(__ls, 2, "W_Global_Entry");
+ dummy->type = luaL_checkudata(__ls, 2, "type_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_W_Global_Entry_init(lua_State* __ls) {
W_Global_Entry* dummy = check_W_Global_Entry(__ls, 1);
- dummy->init = luaL_checkudata(__ls, 2, "W_Global_Entry");
+ dummy->init = luaL_checkudata(__ls, 2, "init_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Global_Section_tablegen.c b/bruiser/luatablegen/W_Global_Section_tablegen.c
index 1254816..0bb2056 100644
--- a/bruiser/luatablegen/W_Global_Section_tablegen.c
+++ b/bruiser/luatablegen/W_Global_Section_tablegen.c
@@ -69,7 +69,7 @@ static int setter_W_Global_Section_count(lua_State* __ls) {
}
static int setter_W_Global_Section_globals(lua_State* __ls) {
W_Global_Section* dummy = check_W_Global_Section(__ls, 1);
- dummy->globals = luaL_checkudata(__ls, 2, "W_Global_Section");
+ dummy->globals = luaL_checkudata(__ls, 2, "globals_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Import_Section_Entry_tablegen.c b/bruiser/luatablegen/W_Import_Section_Entry_tablegen.c
index 0a568e8..97ee26b 100644
--- a/bruiser/luatablegen/W_Import_Section_Entry_tablegen.c
+++ b/bruiser/luatablegen/W_Import_Section_Entry_tablegen.c
@@ -129,7 +129,7 @@ static int setter_W_Import_Section_Entry_kind(lua_State* __ls) {
}
static int setter_W_Import_Section_Entry_type(lua_State* __ls) {
W_Import_Section_Entry* dummy = check_W_Import_Section_Entry(__ls, 1);
- dummy->type = luaL_checkudata(__ls, 2, "W_Import_Section_Entry");
+ dummy->type = luaL_checkudata(__ls, 2, "type_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Import_Section_tablegen.c b/bruiser/luatablegen/W_Import_Section_tablegen.c
index de966f9..5286c75 100644
--- a/bruiser/luatablegen/W_Import_Section_tablegen.c
+++ b/bruiser/luatablegen/W_Import_Section_tablegen.c
@@ -69,7 +69,7 @@ static int setter_W_Import_Section_count(lua_State* __ls) {
}
static int setter_W_Import_Section_entries(lua_State* __ls) {
W_Import_Section* dummy = check_W_Import_Section(__ls, 1);
- dummy->entries = luaL_checkudata(__ls, 2, "W_Import_Section");
+ dummy->entries = luaL_checkudata(__ls, 2, "entries_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Memory_Section_tablegen.c b/bruiser/luatablegen/W_Memory_Section_tablegen.c
index 8972528..78cd664 100644
--- a/bruiser/luatablegen/W_Memory_Section_tablegen.c
+++ b/bruiser/luatablegen/W_Memory_Section_tablegen.c
@@ -69,7 +69,7 @@ static int setter_W_Memory_Section_count(lua_State* __ls) {
}
static int setter_W_Memory_Section_entries(lua_State* __ls) {
W_Memory_Section* dummy = check_W_Memory_Section(__ls, 1);
- dummy->entries = luaL_checkudata(__ls, 2, "W_Memory_Section");
+ dummy->entries = luaL_checkudata(__ls, 2, "entries_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Table_Section_tablegen.c b/bruiser/luatablegen/W_Table_Section_tablegen.c
index 43bcdf0..c536fd3 100644
--- a/bruiser/luatablegen/W_Table_Section_tablegen.c
+++ b/bruiser/luatablegen/W_Table_Section_tablegen.c
@@ -69,7 +69,7 @@ static int setter_W_Table_Section_count(lua_State* __ls) {
}
static int setter_W_Table_Section_entries(lua_State* __ls) {
W_Table_Section* dummy = check_W_Table_Section(__ls, 1);
- dummy->entries = luaL_checkudata(__ls, 2, "W_Table_Section");
+ dummy->entries = luaL_checkudata(__ls, 2, "entries_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Type_Section_Entry_tablegen.c b/bruiser/luatablegen/W_Type_Section_Entry_tablegen.c
index c6a38ea..5462a41 100644
--- a/bruiser/luatablegen/W_Type_Section_Entry_tablegen.c
+++ b/bruiser/luatablegen/W_Type_Section_Entry_tablegen.c
@@ -102,7 +102,7 @@ static int setter_W_Type_Section_Entry_param_count(lua_State* __ls) {
}
static int setter_W_Type_Section_Entry_param_types(lua_State* __ls) {
W_Type_Section_Entry* dummy = check_W_Type_Section_Entry(__ls, 1);
- dummy->param_types = luaL_checkudata(__ls, 2, "W_Type_Section_Entry");
+ dummy->param_types = luaL_checkudata(__ls, 2, "param_types_t");
lua_settop(__ls, 1);
return 1;
}
@@ -114,7 +114,7 @@ static int setter_W_Type_Section_Entry_return_count(lua_State* __ls) {
}
static int setter_W_Type_Section_Entry_return_types(lua_State* __ls) {
W_Type_Section_Entry* dummy = check_W_Type_Section_Entry(__ls, 1);
- dummy->return_types = luaL_checkudata(__ls, 2, "W_Type_Section_Entry");
+ dummy->return_types = luaL_checkudata(__ls, 2, "return_types_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/W_Type_Section_tablegen.c b/bruiser/luatablegen/W_Type_Section_tablegen.c
index 237c87b..d7e9f7e 100644
--- a/bruiser/luatablegen/W_Type_Section_tablegen.c
+++ b/bruiser/luatablegen/W_Type_Section_tablegen.c
@@ -69,7 +69,7 @@ static int setter_W_Type_Section_count(lua_State* __ls) {
}
static int setter_W_Type_Section_entries(lua_State* __ls) {
W_Type_Section* dummy = check_W_Type_Section(__ls, 1);
- dummy->entries = luaL_checkudata(__ls, 2, "W_Type_Section");
+ dummy->entries = luaL_checkudata(__ls, 2, "entries_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/Wasm_Module_tablegen.c b/bruiser/luatablegen/Wasm_Module_tablegen.c
index 318309e..99b603c 100644
--- a/bruiser/luatablegen/Wasm_Module_tablegen.c
+++ b/bruiser/luatablegen/Wasm_Module_tablegen.c
@@ -162,73 +162,73 @@ static int getter_Wasm_Module_name(lua_State* __ls) {
static int setter_Wasm_Module_type_section(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->type_section = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->type_section = luaL_checkudata(__ls, 2, "type_section_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_Wasm_Module_import_section(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->import_section = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->import_section = luaL_checkudata(__ls, 2, "import_section_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_Wasm_Module_function_section(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->function_section = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->function_section = luaL_checkudata(__ls, 2, "function_section_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_Wasm_Module_table_section(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->table_section = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->table_section = luaL_checkudata(__ls, 2, "table_section_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_Wasm_Module_memory_section(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->memory_section = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->memory_section = luaL_checkudata(__ls, 2, "memory_section_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_Wasm_Module_global_section(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->global_section = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->global_section = luaL_checkudata(__ls, 2, "global_section_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_Wasm_Module_export_section(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->export_section = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->export_section = luaL_checkudata(__ls, 2, "export_section_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_Wasm_Module_start_section(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->start_section = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->start_section = luaL_checkudata(__ls, 2, "start_section_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_Wasm_Module_element_section(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->element_section = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->element_section = luaL_checkudata(__ls, 2, "element_section_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_Wasm_Module_code_section(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->code_section = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->code_section = luaL_checkudata(__ls, 2, "code_section_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_Wasm_Module_data_section(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->data_section = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->data_section = luaL_checkudata(__ls, 2, "data_section_t");
lua_settop(__ls, 1);
return 1;
}
static int setter_Wasm_Module_W_Custom_Sections(lua_State* __ls) {
Wasm_Module* dummy = check_Wasm_Module(__ls, 1);
- dummy->W_Custom_Sections = luaL_checkudata(__ls, 2, "Wasm_Module");
+ dummy->W_Custom_Sections = luaL_checkudata(__ls, 2, "W_Custom_Sections_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/memory_type_t_tablegen.c b/bruiser/luatablegen/memory_type_t_tablegen.c
index 5f75d51..3914732 100644
--- a/bruiser/luatablegen/memory_type_t_tablegen.c
+++ b/bruiser/luatablegen/memory_type_t_tablegen.c
@@ -54,7 +54,7 @@ static int getter_memory_type_t_resizable_limit(lua_State* __ls) {
static int setter_memory_type_t_resizable_limit(lua_State* __ls) {
memory_type_t* dummy = check_memory_type_t(__ls, 1);
- dummy->resizable_limit = luaL_checkudata(__ls, 2, "memory_type_t");
+ dummy->resizable_limit = luaL_checkudata(__ls, 2, "resizable_limit_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/luatablegen/table_type_t_tablegen.c b/bruiser/luatablegen/table_type_t_tablegen.c
index a8e5af0..c37af75 100644
--- a/bruiser/luatablegen/table_type_t_tablegen.c
+++ b/bruiser/luatablegen/table_type_t_tablegen.c
@@ -69,7 +69,7 @@ static int setter_table_type_t_element_type(lua_State* __ls) {
}
static int setter_table_type_t_resizable_limit(lua_State* __ls) {
table_type_t* dummy = check_table_type_t(__ls, 1);
- dummy->resizable_limit = luaL_checkudata(__ls, 2, "table_type_t");
+ dummy->resizable_limit = luaL_checkudata(__ls, 2, "resizable_limit_t");
lua_settop(__ls, 1);
return 1;
}
diff --git a/bruiser/makefile b/bruiser/makefile
index ed592d8..31dff92 100644
--- a/bruiser/makefile
+++ b/bruiser/makefile
@@ -17,14 +17,14 @@ C_SRCS=$(wildcard *.c)
#for some reason without ld the build fails on ubuntu trusty on travis
#EXTRA_LD_FLAGS+=-lpthread -ldl -lutil -lm -Xlinker -lpython3
EXTRA_LD_FLAGS+=$(shell $(PY_CONF) --ldflags) -lffi -lcapstone -lkeystone -L./lua-5.3.4/src -llua
-TBG_OBJLIST_INC:=$(patsubst ./luatablegen/%.c, ./luatablegen/%.o, $(wildcard ./luatablegen/*.c))
+TBG_OBJLIST_INC=$(patsubst ./luatablegen/%.c, ./luatablegen/%.o, $(wildcard ./luatablegen/*.c))
SAN?=
######################################RULES####################################
.DEFAULT: all
.PHONY: all clean help
-all: $(BRUISER)
+all: $(BRUISER) ./wasmtablegen.json
depend:.depend
dependc:.dependc
diff --git a/bruiser/tablegen.sh b/bruiser/tablegen.sh
index 03a660c..3279e22 100755
--- a/bruiser/tablegen.sh
+++ b/bruiser/tablegen.sh
@@ -1,6 +1,6 @@
#!/usr/bin/bash
cd $(dirname $0)
-../extra-tools/luatablegen.py --tbg ./wasmtablegen.json --out ./luatablegen --luaheader ../lua-5.3.4/src --pre ./luatablegen/wasmheader.txt --headeraggr ./luatablegen/wasm_tables.h --lualibpath ./lua-scripts/wasm.lua
+../extra-tools/luatablegen.py --tbg ./wasmtablegen.json --out ./luatablegen --luaheader ../lua-5.3.4/src --pre ./luatablegen/wasmheader.txt --headeraggr ./luatablegen/wasm_tables.h --lualibpath ./lua-scripts/wasm.lua --docpath /home/bloodstalker/extra/mutator.wiki/wasm.md
if [[ $1 == test ]]; then
make -C ./luatablegen
make clean
diff --git a/bruiser/wasm/execute.py b/bruiser/wasm/execute.py
index af8455f..40b9042 100644
--- a/bruiser/wasm/execute.py
+++ b/bruiser/wasm/execute.py
@@ -1,4 +1,4 @@
-from OpCodes import *
+from opcodes import *
from utils import Colors, ror, rol
import numpy as np
import math
diff --git a/bruiser/wasm/TBInit.py b/bruiser/wasm/init.py
index f14dfd1..f3ac986 100644
--- a/bruiser/wasm/TBInit.py
+++ b/bruiser/wasm/init.py
@@ -1,5 +1,5 @@
from utils import Colors, init_interpret, ParseFlags
-from OpCodes import WASM_OP_Code
+from opcodes import WASM_OP_Code
from section_structs import Code_Section, Func_Body, WASM_Ins, Resizable_Limits, Memory_Section
from execute import *
import datetime as dti
diff --git a/bruiser/wasm/OpCodes.py b/bruiser/wasm/opcodes.py
index f7c9a1b..f7c9a1b 100644
--- a/bruiser/wasm/OpCodes.py
+++ b/bruiser/wasm/opcodes.py
diff --git a/bruiser/wasm/parse.py b/bruiser/wasm/parse.py
index 05c6465..424a2b6 100755
--- a/bruiser/wasm/parse.py
+++ b/bruiser/wasm/parse.py
@@ -6,9 +6,9 @@ import sys
import re
from section_structs import *
from utils import *
-from OpCodes import *
+from opcodes import *
from copy import deepcopy
-from TBInit import *
+from init import *
import readline
import code
import signal
diff --git a/bruiser/wasm/utils.py b/bruiser/wasm/utils.py
index 6f93a94..69393b4 100644
--- a/bruiser/wasm/utils.py
+++ b/bruiser/wasm/utils.py
@@ -1,4 +1,4 @@
-from OpCodes import *
+from opcodes import *
import numpy as np
import struct as stc
diff --git a/extra-tools/luatablegen.py b/extra-tools/luatablegen.py
index dbf7435..aca41d3 100755
--- a/extra-tools/luatablegen.py
+++ b/extra-tools/luatablegen.py
@@ -205,7 +205,7 @@ class TbgParser(object):
c_source.write(SETTER_GEN[0].replace("XXX", struct_name).replace("YYY", field_name))
c_source.write(SETTER_GEN[1].replace("XXX", struct_name))
if lua_type == "integer": dummy = "\tdummy->" + field_name + " = " + "luaL_checkinteger(__ls, 2);\n"
- elif lua_type == "lightuserdata": dummy ="\tdummy->" + field_name + " = " + "luaL_checkudata(__ls, 2, "+'"'+struct_name+'"'+");\n"
+ elif lua_type == "lightuserdata": dummy ="\tdummy->" + field_name + " = " + "luaL_checkudata(__ls, 2, "+'"'+field_name+"_t"+'"'+");\n"
elif lua_type == "number": dummy ="\tdummy->" + field_name + " = " + "luaL_checknumber(__ls, 2);\n"
elif lua_type == "string": dummy ="\tdummy->" + field_name + " = " + "luaL_checkstring(__ls, 2);\n"
elif lua_type == "boolean": pass
@@ -255,13 +255,28 @@ class TbgParser(object):
c_source.write("\n")
def docgen_md(self, d_source, struct_name, field_names, field_types, lua_types):
- d_source.write("## wasm tables method list:\n")
+ d_source.write("## " + "__" + struct_name + "__" + ":\n")
+ d_source.write("\n")
+ d_source.write("### " + "_" + "getter fields" + "_" + ":\n")
for field_name,lua_type in zip(field_names, lua_types):
d_source.write(struct_name + ":" + field_name + "()" + " -- ")
- d_source.write(lua_type + "<br/>" + "\n")
+ if lua_type == "lightuserdata":
+ d_source.write("return type: " + field_name + "_t" + "<br/>" + "\n")
+ else:
+ d_source.write("return type: " + lua_type + "<br/>" + "\n")
+ d_source.write("\n")
+ d_source.write("### " + "_" + "setter fields" + "_" + ":\n")
for field_name,lua_type in zip(field_names, lua_types):
d_source.write("set_" + struct_name + ":" + field_name + "()" + " -- ")
- d_source.write(lua_type + "<br/>" + "\n")
+ if lua_type == "lightuserdata":
+ d_source.write("arg type: " + field_name + "_t" + "<br/>" + "\n")
+ else:
+ d_source.write("arg type: " + lua_type + "<br/>" + "\n")
+ d_source.write("\n")
+ d_source.write("### " + "_" + "constructors" + "_" + ":\n")
+ d_source.write(struct_name + ":new() -- needs all the args<br/>\n")
+ d_source.write(struct_name + "() -- lazy constructor<br/>\n")
+ d_source.write("\n")
d_source.write("\n")
def luagen(self):
@@ -293,6 +308,8 @@ class TbgParser(object):
c_source = open(self.argparser.args.outfile, "w")
if self.argparser.args.docpath:
d_source = open(self.argparser.args.docpath, "w")
+ d_source.write("The lazy constructors are inside wasm.lua.\n")
+ d_source.write("```lua\nlocal wasm = require(\"wasm\")\n```\n")
for k, v in self.tbg_file.items():
struct_name = k
field_names = v['field_name']
@@ -373,6 +390,8 @@ class TbgParser(object):
m_source = open(self.argparser.args.out + "/" + "tablegen.mk", "w")
# generate lua module
self.luagen()
+ if self.argparser.args.docpath:
+ d_source.write("_automatically generated by luatablegen._<br/>\n")
# write code here
def premain(argparser):