From ce424e6d92d77e0000b1f6b7cc93c20062cc720b Mon Sep 17 00:00:00 2001 From: bloodstalker Date: Sun, 30 Sep 2018 18:29:30 +0330 Subject: some more fixes, mainly for tablegen and fualtreiber, will check later to make sure everything is working correctly --- bruiser/autogen/wasm/ft/autowasm.c | 208 ++++++++++++++++++++++++------------ bruiser/autogen/wasm/ltg/luwasm.xml | 2 +- bruiser/bruiser.cpp | 5 +- bruiser/faultreiber | 2 +- bruiser/lua-scripts/wasmtest.lua | 15 ++- bruiser/tablegen | 2 +- 6 files changed, 159 insertions(+), 75 deletions(-) (limited to 'bruiser') diff --git a/bruiser/autogen/wasm/ft/autowasm.c b/bruiser/autogen/wasm/ft/autowasm.c index 53986c1..a766d2a 100644 --- a/bruiser/autogen/wasm/ft/autowasm.c +++ b/bruiser/autogen/wasm/ft/autowasm.c @@ -30,123 +30,197 @@ int main(int argc, char **argv) { wasm_lib_ret_t *lib_ret = read_aggr_wasm(wasm); printf("finished reading\n"); -#if 0 - printf("magic_number:%x\n", lib_ret->obj->magic_number_container->magic_number); +#if 1 + printf("magic_number:%x\n", + lib_ret->obj->magic_number_container->magic_number); printf("version:%x\n", lib_ret->obj->version_container->version); printf("type section id:%d\n", lib_ret->obj->W_Type_Section_container->id); - printf("type section payloadlength:%d\n", lib_ret->obj->W_Type_Section_container->payloadlength); - printf("type_section entry count:%d\n", lib_ret->obj->W_Type_Section_container->count); - for (int i=0; i < lib_ret->obj->W_Type_Section_container->count; ++i) { - printf("param_count:%d\n",lib_ret->obj->W_Type_Section_container->entries[i]->param_count); - for (int j = 0; j < lib_ret->obj->W_Type_Section_container->entries[i]->param_count; ++j) - printf("param_types:%d\n",lib_ret->obj->W_Type_Section_container->entries[i]->param_types[j]); - printf("return_count:%d\n", lib_ret->obj->W_Type_Section_container->entries[i]->return_count); - for (int j = 0; j < lib_ret->obj->W_Type_Section_container->entries[i]->return_count; ++j) - printf("param_types:%d\n",lib_ret->obj->W_Type_Section_container->entries[i]->return_types[j]); + printf("type section payloadlength:%d\n", + lib_ret->obj->W_Type_Section_container->payloadlength); + printf("type_section entry count:%d\n", + lib_ret->obj->W_Type_Section_container->count); + for (int i = 0; i < lib_ret->obj->W_Type_Section_container->count; ++i) { + printf("param_count:%d\n", + lib_ret->obj->W_Type_Section_container->entries[i]->param_count); + for (int j = 0; + j < lib_ret->obj->W_Type_Section_container->entries[i]->param_count; + ++j) + printf( + "param_types:%d\n", + lib_ret->obj->W_Type_Section_container->entries[i]->param_types[j]); + printf("return_count:%d\n", + lib_ret->obj->W_Type_Section_container->entries[i]->return_count); + for (int j = 0; + j < lib_ret->obj->W_Type_Section_container->entries[i]->return_count; + ++j) + printf( + "param_types:%d\n", + lib_ret->obj->W_Type_Section_container->entries[i]->return_types[j]); } - printf("import_section_id:%d\n", lib_ret->obj->W_Import_Section_container->id); - printf("import_section_payloadlength:%d\n", lib_ret->obj->W_Import_Section_container->payloadlength); - printf("import_section_count:%d\n", lib_ret->obj->W_Import_Section_container->count); - for(int i = 0; i < lib_ret->obj->W_Import_Section_container->count; ++i) { - printf("module_length:%d\n", lib_ret->obj->W_Import_Section_container->entries[i]->module_length); - printf("module_str:%s\n", lib_ret->obj->W_Import_Section_container->entries[i]->module_str); - printf("field_length:%d\n", lib_ret->obj->W_Import_Section_container->entries[i]->field_len); - printf("field_str:%s\n", lib_ret->obj->W_Import_Section_container->entries[i]->field_str); - printf("kind:%d\n", lib_ret->obj->W_Import_Section_container->entries[i]->kind); + printf("import_section_id:%d\n", + lib_ret->obj->W_Import_Section_container->id); + printf("import_section_payloadlength:%d\n", + lib_ret->obj->W_Import_Section_container->payloadlength); + printf("import_section_count:%d\n", + lib_ret->obj->W_Import_Section_container->count); + for (int i = 0; i < lib_ret->obj->W_Import_Section_container->count; ++i) { + printf("module_length:%d\n", + lib_ret->obj->W_Import_Section_container->entries[i]->module_length); + printf("module_str:%s\n", + lib_ret->obj->W_Import_Section_container->entries[i]->module_str); + printf("field_length:%d\n", + lib_ret->obj->W_Import_Section_container->entries[i]->field_len); + printf("field_str:%s\n", + lib_ret->obj->W_Import_Section_container->entries[i]->field_str); + printf("kind:%d\n", + lib_ret->obj->W_Import_Section_container->entries[i]->kind); if (lib_ret->obj->W_Import_Section_container->entries[i]->kind == 0) - printf("type:%d\n", lib_ret->obj->W_Import_Section_container->entries[i]->kind); + printf("type:%d\n", + lib_ret->obj->W_Import_Section_container->entries[i]->kind); printf("\n"); } - printf("function_section_id:%d\n", lib_ret->obj->W_Function_Section_container->id); - printf("function_section_payloadlength:%d\n", lib_ret->obj->W_Function_Section_container->payloadlength); - printf("function_section_count:%d\n", lib_ret->obj->W_Function_Section_container->count); + printf("function_section_id:%d\n", + lib_ret->obj->W_Function_Section_container->id); + printf("function_section_payloadlength:%d\n", + lib_ret->obj->W_Function_Section_container->payloadlength); + printf("function_section_count:%d\n", + lib_ret->obj->W_Function_Section_container->count); for (int i = 0; i < lib_ret->obj->W_Function_Section_container->count; ++i) printf("type:%d\n", lib_ret->obj->W_Function_Section_container->types[i]); printf("table_section_id:%d\n", lib_ret->obj->W_Table_Section_container->id); - printf("table_section_payloadlength:%d\n", lib_ret->obj->W_Table_Section_container->payloadlength); - printf("table_section_count:%d\n", lib_ret->obj->W_Table_Section_container->count); + printf("table_section_payloadlength:%d\n", + lib_ret->obj->W_Table_Section_container->payloadlength); + printf("table_section_count:%d\n", + lib_ret->obj->W_Table_Section_container->count); for (int i = 0; i < lib_ret->obj->W_Table_Section_container->count; ++i) { - printf("element_type:%d\n", lib_ret->obj->W_Table_Section_container->entries[i]->element_type); - printf("rl_flags:%d\n", lib_ret->obj->W_Table_Section_container->entries[i]->resizable_limit->flags); - printf("rl_initial:%d\n", lib_ret->obj->W_Table_Section_container->entries[i]->resizable_limit->initial); - printf("rl_maximum:%d\n", lib_ret->obj->W_Table_Section_container->entries[i]->resizable_limit->maximum); + printf("element_type:%d\n", + lib_ret->obj->W_Table_Section_container->entries[i]->element_type); + printf("rl_flags:%d\n", lib_ret->obj->W_Table_Section_container->entries[i] + ->resizable_limit->flags); + printf("rl_initial:%d\n", + lib_ret->obj->W_Table_Section_container->entries[i] + ->resizable_limit->initial); + printf("rl_maximum:%d\n", + lib_ret->obj->W_Table_Section_container->entries[i] + ->resizable_limit->maximum); } - printf("memory_section_id:%d\n", lib_ret->obj->W_Memory_Section_container->id); - printf("memory_section_payload_length:%d\n", lib_ret->obj->W_Memory_Section_container->payloadlength); - printf("rl_flags:%d\n", lib_ret->obj->W_Memory_Section_container->entries->resizable_limit->flags); - printf("rl_initial:%d\n", lib_ret->obj->W_Memory_Section_container->entries->resizable_limit->initial); - printf("rl_maximum:%d\n", lib_ret->obj->W_Memory_Section_container->entries->resizable_limit->maximum); - - if (lib_ret->obj->W_Global_Section_container == NULL) printf("global section doesnt exist.\n"); - - printf("export_section_id:%d\n", lib_ret->obj->W_Export_Section_container->id); - printf("export_section_payloadlength:%d\n", lib_ret->obj->W_Export_Section_container->payloadlength); + printf("memory_section_id:%d\n", + lib_ret->obj->W_Memory_Section_container->id); + printf("memory_section_payload_length:%d\n", + lib_ret->obj->W_Memory_Section_container->payloadlength); + printf("rl_flags:%d\n", lib_ret->obj->W_Memory_Section_container->entries + ->resizable_limit->flags); + printf("rl_initial:%d\n", lib_ret->obj->W_Memory_Section_container->entries + ->resizable_limit->initial); + printf("rl_maximum:%d\n", lib_ret->obj->W_Memory_Section_container->entries + ->resizable_limit->maximum); + + if (lib_ret->obj->W_Global_Section_container == NULL) + printf("global section doesnt exist.\n"); + + printf("export_section_id:%d\n", + lib_ret->obj->W_Export_Section_container->id); + printf("export_section_payloadlength:%d\n", + lib_ret->obj->W_Export_Section_container->payloadlength); printf("entry count:%d\n", lib_ret->obj->W_Export_Section_container->count); for (int i = 0; i < lib_ret->obj->W_Export_Section_container->count; ++i) { - printf("field_len:%d\n", lib_ret->obj->W_Export_Section_container->entries[i]->field_len); - printf("field_str:%s\n", lib_ret->obj->W_Export_Section_container->entries[i]->field_str); - printf("kind:%d\n", lib_ret->obj->W_Export_Section_container->entries[i]->kind); - printf("index:%d\n", lib_ret->obj->W_Export_Section_container->entries[i]->index); + printf("field_len:%d\n", + lib_ret->obj->W_Export_Section_container->entries[i]->field_len); + printf("field_str:%s\n", + lib_ret->obj->W_Export_Section_container->entries[i]->field_str); + printf("kind:%d\n", + lib_ret->obj->W_Export_Section_container->entries[i]->kind); + printf("index:%d\n", + lib_ret->obj->W_Export_Section_container->entries[i]->index); } - if (lib_ret->obj->W_Start_Section_container == NULL) printf("start section doesnt exist.\n"); + if (lib_ret->obj->W_Start_Section_container == NULL) + printf("start section doesnt exist.\n"); - printf("element_seciton_id:%d\n", lib_ret->obj->W_Element_Section_container->id); - printf("element_section_payloadlength:%d\n", lib_ret->obj->W_Element_Section_container->payloadlength); + printf("element_seciton_id:%d\n", + lib_ret->obj->W_Element_Section_container->id); + printf("element_section_payloadlength:%d\n", + lib_ret->obj->W_Element_Section_container->payloadlength); printf("entry count:%d\n", lib_ret->obj->W_Element_Section_container->count); for (int i = 0; i < lib_ret->obj->W_Element_Section_container->count; ++i) { - printf("index:%d\n", lib_ret->obj->W_Element_Section_container->entries[i]->index); + printf("index:%d\n", + lib_ret->obj->W_Element_Section_container->entries[i]->index); for (int j = 0; j < 3; ++j) { - printf("code:%d\n", lib_ret->obj->W_Element_Section_container->entries[i]->init->code[j]); + printf( + "code:%d\n", + lib_ret->obj->W_Element_Section_container->entries[i]->init->code[j]); } - printf("num_length:%d\n", lib_ret->obj->W_Element_Section_container->entries[i]->num_length); - for (int j = 0; j < lib_ret->obj->W_Element_Section_container->entries[i]->num_length; ++j) { - printf("elems:%d\n", lib_ret->obj->W_Element_Section_container->entries[i]->elems[j]); + printf("num_length:%d\n", + lib_ret->obj->W_Element_Section_container->entries[i]->num_length); + for (int j = 0; + j < lib_ret->obj->W_Element_Section_container->entries[i]->num_length; + ++j) { + printf("elems:%d\n", + lib_ret->obj->W_Element_Section_container->entries[i]->elems[j]); } } printf("code_section_id:%d\n", lib_ret->obj->W_Code_Section_container->id); - printf("code_section_payloadlength:%d\n", lib_ret->obj->W_Code_Section_container->payloadlength); + printf("code_section_payloadlength:%d\n", + lib_ret->obj->W_Code_Section_container->payloadlength); printf("count:%d\n", lib_ret->obj->W_Code_Section_container->count); for (int i = 0; i < lib_ret->obj->W_Code_Section_container->count; ++i) { - printf("body_size:%d\n", lib_ret->obj->W_Code_Section_container->bodies[i]->body_size); - printf("local_count:%d\n", lib_ret->obj->W_Code_Section_container->bodies[i]->local_count); + printf("body_size:%d\n", + lib_ret->obj->W_Code_Section_container->bodies[i]->body_size); + printf("local_count:%d\n", + lib_ret->obj->W_Code_Section_container->bodies[i]->local_count); if (lib_ret->obj->W_Code_Section_container->bodies[i]->local_count > 0) { - for (int j =0; j < lib_ret->obj->W_Code_Section_container->bodies[i]->local_count; ++j) { - for (int k = 0; k < lib_ret->obj->W_Code_Section_container->bodies[i]->locals[j]->count; ++k) { + for (int j = 0; + j < lib_ret->obj->W_Code_Section_container->bodies[i]->local_count; + ++j) { + for (int k = 0; k < lib_ret->obj->W_Code_Section_container->bodies[i] + ->locals[j] + ->count; + ++k) { } } } printf("code:\n"); - for (int j = 0; j < lib_ret->obj->W_Code_Section_container->bodies[i]->body_size; ++j) { - printf("%02x ", lib_ret->obj->W_Code_Section_container->bodies[i]->code[j]); + for (int j = 0; + j < lib_ret->obj->W_Code_Section_container->bodies[i]->body_size; + ++j) { + printf("%02x ", + lib_ret->obj->W_Code_Section_container->bodies[i]->code[j]); } printf("\n"); } printf("data_section_id:%d\n", lib_ret->obj->W_Data_Section_container->id); - printf("data_section_payloadlength:%d\n", lib_ret->obj->W_Data_Section_container->payloadlength); + printf("data_section_payloadlength:%d\n", + lib_ret->obj->W_Data_Section_container->payloadlength); 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("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("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"); - for (int j = 0; j < lib_ret->obj->W_Data_Section_container->entries[i]->size; ++j) { - printf("%c ", lib_ret->obj->W_Data_Section_container->entries[i]->data[j]); + for (int j = 0; + j < lib_ret->obj->W_Data_Section_container->entries[i]->size; ++j) { + printf("%c ", + lib_ret->obj->W_Data_Section_container->entries[i]->data[j]); } printf("\n"); int j = 0; printf("offset:\n"); - while(1) { - printf("%02x ", lib_ret->obj->W_Data_Section_container->entries[i]->offset->code[j]); - if (lib_ret->obj->W_Data_Section_container->entries[i]->offset->code[j] == 11) { + while (1) { + printf( + "%02x ", + lib_ret->obj->W_Data_Section_container->entries[i]->offset->code[j]); + if (lib_ret->obj->W_Data_Section_container->entries[i]->offset->code[j] == + 11) { break; } j++; diff --git a/bruiser/autogen/wasm/ltg/luwasm.xml b/bruiser/autogen/wasm/ltg/luwasm.xml index 6db8b7b..8d6efe0 100644 --- a/bruiser/autogen/wasm/ltg/luwasm.xml +++ b/bruiser/autogen/wasm/ltg/luwasm.xml @@ -100,7 +100,7 @@ - + diff --git a/bruiser/bruiser.cpp b/bruiser/bruiser.cpp index 726f963..048dc54 100644 --- a/bruiser/bruiser.cpp +++ b/bruiser/bruiser.cpp @@ -1546,8 +1546,8 @@ class LuaWrapper { int j = 0; printf("offset:\n"); while(1) { - printf("%02x ", lib_ret->obj->W_Data_Section_container->entries[i]->offset->code[j]); - if (lib_ret->obj->W_Data_Section_container->entries[i]->offset->code[j] == 11) { + printf("%02x ", (unsigned char)lib_ret->obj->W_Data_Section_container->entries[i]->offset->code[j]); + if (lib_ret->obj->W_Data_Section_container->entries[i]->offset->code[j] == 11U) { break; } j++; @@ -2209,6 +2209,7 @@ class RunLoop { /*cli execution loop*/ while((command = linenoise(">>>")) != NULL) { + //FIXME-if the current command is the same as last command skip adding to history linenoiseHistoryAdd(command); linenoiseHistorySave(SHELL_HISTORY_FILE.c_str()); le.RunChunk(command); diff --git a/bruiser/faultreiber b/bruiser/faultreiber index a9ba7c1..aa60b19 160000 --- a/bruiser/faultreiber +++ b/bruiser/faultreiber @@ -1 +1 @@ -Subproject commit a9ba7c19941ae6b47390a8f130a80edc4bad1df7 +Subproject commit aa60b19995fb0100ee16d57265e4096566b22226 diff --git a/bruiser/lua-scripts/wasmtest.lua b/bruiser/lua-scripts/wasmtest.lua index 15aa395..32c8442 100644 --- a/bruiser/lua-scripts/wasmtest.lua +++ b/bruiser/lua-scripts/wasmtest.lua @@ -197,9 +197,18 @@ function demo4() for k,v in pairs(a["data_section"]:entries()) do io.write(v:index().."\t") io.write(tostring(v:offset()).."\t") - io.write(v:size().."\n") - --FIXME - --io.write(v:data().."\n") + print(colors("%{red}"..tostring(#v:offset():code()))) + for i = 1, #v:offset():code() do + local c = v:offset():code():sub(i,i) + print(colors("%{red}"..string.byte(c))) + end + --io.write(colors("%{yellow}"..v:offset():code())) + io.write("size:"..v:size().."\n") + io.write(tostring(v:data()).."\n") + for i, j in pairs(v:data()) do + io.write(colors("%{blue}"..string.char(j))) + end + io.write("\n") end end else diff --git a/bruiser/tablegen b/bruiser/tablegen index 66e1d73..c0eda3b 160000 --- a/bruiser/tablegen +++ b/bruiser/tablegen @@ -1 +1 @@ -Subproject commit 66e1d73de5160333a8552f4e28027e8dcd69cb3b +Subproject commit c0eda3bcb258278bba83b6d3d26d5d7f4b65ef4c -- cgit v1.2.3