diff options
| author | bloodstalker <thabogre@gmail.com> | 2018-09-16 15:19:31 +0000 | 
|---|---|---|
| committer | bloodstalker <thabogre@gmail.com> | 2018-09-16 15:19:31 +0000 | 
| commit | 82a3deb3ce19e728d5bafd59e58ed2eb6419b0ef (patch) | |
| tree | e7aba1a0d12ce1319fbb512777e875cb0970bb63 /bruiser/autogen/wasm/ft | |
| parent | begenning to integrate and test both the codegens. run git pull for faultreib... (diff) | |
| download | mutator-82a3deb3ce19e728d5bafd59e58ed2eb6419b0ef.tar.gz mutator-82a3deb3ce19e728d5bafd59e58ed2eb6419b0ef.zip | |
WIP
Diffstat (limited to 'bruiser/autogen/wasm/ft')
| -rw-r--r-- | bruiser/autogen/wasm/ft/autowasm.c | 261 | ||||
| -rw-r--r-- | bruiser/autogen/wasm/ft/makefile | 14 | 
2 files changed, 145 insertions, 130 deletions
| diff --git a/bruiser/autogen/wasm/ft/autowasm.c b/bruiser/autogen/wasm/ft/autowasm.c index 30442ba..cbc6e5a 100644 --- a/bruiser/autogen/wasm/ft/autowasm.c +++ b/bruiser/autogen/wasm/ft/autowasm.c @@ -4,170 +4,179 @@  #include <stdio.h>  #include <stdlib.h>  #include <unistd.h> +#include <sys/resource.h> -#include "./aggregate.h" -#include "./read.h"  #include "./structs.h" +#include "./read.h" +#include "./aggregate.h" +  #pragma weak main -int main(int argc, char **argv) { +int main (int argc, char** argv) { +  const rlim_t kStackSize = 160 * 1024 * 1024;   // min stack size = 16 MB +  struct rlimit rl; +  int result; + +  result = getrlimit(RLIMIT_STACK, &rl); +  if (result == 0) +  { +      if (rl.rlim_cur < kStackSize) +      { +          rl.rlim_cur = kStackSize; +          result = setrlimit(RLIMIT_STACK, &rl); +          if (result != 0) +          { +              fprintf(stderr, "setrlimit returned result = %d\n", result); +          } +      } +  }    int wasm = open("./test.wasm", O_RDONLY); -  read_aggr_wasm(wasm); - -  printf("magic_number:%x\n", magic_number_container->magic_number); -  printf("version:%x\n", version_container->version); - -  printf("type section id:%d\n", W_Type_Section_container->id); -  printf("type section payloadlength:%d\n", -         W_Type_Section_container->payloadlength); -  printf("type_section entry count:%d\n", W_Type_Section_container->count); -  for (int i = 0; i < W_Type_Section_container->count; ++i) { -    printf("param_count:%d\n", -           W_Type_Section_container->entries[i]->param_count); -    for (int j = 0; j < W_Type_Section_container->entries[i]->param_count; ++j) -      printf("param_types:%d\n", -             W_Type_Section_container->entries[i]->param_types[j]); -    printf("return_count:%d\n", -           W_Type_Section_container->entries[i]->return_count); -    for (int j = 0; j < W_Type_Section_container->entries[i]->return_count; ++j) -      printf("param_types:%d\n", -             W_Type_Section_container->entries[i]->return_types[j]); +  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); +  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("import_section_id:%d\n", W_Import_Section_container->id); -  printf("import_section_payloadlength:%d\n", -         W_Import_Section_container->payloadlength); -  printf("import_section_count:%d\n", W_Import_Section_container->count); -  for (int i = 0; i < W_Import_Section_container->count; ++i) { -    printf("module_length:%d\n", -           W_Import_Section_container->entries[i]->module_length); -    printf("module_str:%s\n", -           W_Import_Section_container->entries[i]->module_str); -    printf("field_length:%d\n", -           W_Import_Section_container->entries[i]->field_len); -    printf("field_str:%s\n", W_Import_Section_container->entries[i]->field_str); -    printf("kind:%d\n", W_Import_Section_container->entries[i]->kind); -    if (W_Import_Section_container->entries[i]->kind == 0) -      printf("type:%d\n", 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("\n");    } -  printf("function_section_id:%d\n", W_Function_Section_container->id); -  printf("function_section_payloadlength:%d\n", -         W_Function_Section_container->payloadlength); -  printf("function_section_count:%d\n", W_Function_Section_container->count); -  for (int i = 0; i < W_Function_Section_container->count; ++i) -    printf("type:%d\n", W_Function_Section_container->types[i]); - -  printf("table_section_id:%d\n", W_Table_Section_container->id); -  printf("table_section_payloadlength:%d\n", -         W_Table_Section_container->payloadlength); -  printf("table_section_count:%d\n", W_Table_Section_container->count); -  for (int i = 0; i < W_Table_Section_container->count; ++i) { -    printf("element_type:%d\n", -           W_Table_Section_container->entries[i]->element_type); -    printf("rl_flags:%d\n", -           W_Table_Section_container->entries[i]->resizable_limit->flags); -    printf("rl_initial:%d\n", -           W_Table_Section_container->entries[i]->resizable_limit->initial); -    printf("rl_maximum:%d\n", -           W_Table_Section_container->entries[i]->resizable_limit->maximum); +  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); +  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("memory_section_id:%d\n", W_Memory_Section_container->id); -  printf("memory_section_payload_length:%d\n", -         W_Memory_Section_container->payloadlength); -  printf("rl_flags:%d\n", -         W_Memory_Section_container->entries->resizable_limit->flags); -  printf("rl_initial:%d\n", -         W_Memory_Section_container->entries->resizable_limit->initial); -  printf("rl_maximum:%d\n", -         W_Memory_Section_container->entries->resizable_limit->maximum); - -  if (W_Global_Section_container == NULL) -    printf("global section doesnt exist.\n"); - -  printf("export_section_id:%d\n", W_Export_Section_container->id); -  printf("export_section_payloadlength:%d\n", -         W_Export_Section_container->payloadlength); -  printf("entry count:%d\n", W_Export_Section_container->count); - -  for (int i = 0; i < W_Export_Section_container->count; ++i) { -    printf("field_len:%d\n", W_Export_Section_container->entries[i]->field_len); -    printf("field_str:%s\n", W_Export_Section_container->entries[i]->field_str); -    printf("kind:%d\n", W_Export_Section_container->entries[i]->kind); -    printf("index:%d\n", W_Export_Section_container->entries[i]->index); +  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);    } -  if (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", W_Element_Section_container->id); -  printf("element_section_payloadlength:%d\n", -         W_Element_Section_container->payloadlength); -  printf("entry count:%d\n", W_Element_Section_container->count); +  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 < W_Element_Section_container->count; ++i) { -    printf("index:%d\n", W_Element_Section_container->entries[i]->index); +  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);      for (int j = 0; j < 3; ++j) { -      printf("code:%d\n", -             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", -           W_Element_Section_container->entries[i]->num_length); -    for (int j = 0; j < W_Element_Section_container->entries[i]->num_length; -         ++j) { -      printf("elems:%d\n", 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", W_Code_Section_container->id); -  printf("code_section_payloadlength:%d\n", -         W_Code_Section_container->payloadlength); -  printf("count:%d\n", W_Code_Section_container->count); - -  for (int i = 0; i < W_Code_Section_container->count; ++i) { -    printf("body_size:%d\n", W_Code_Section_container->bodies[i]->body_size); -    printf("local_count:%d\n", -           W_Code_Section_container->bodies[i]->local_count); -    if (W_Code_Section_container->bodies[i]->local_count > 0) { -      for (int j = 0; j < W_Code_Section_container->bodies[i]->local_count; -           ++j) { -        for (int k = 0; -             k < W_Code_Section_container->bodies[i]->locals[j]->count; ++k) { +  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("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); +    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) {          }        }      }      printf("code:\n"); -    for (int j = 0; j < W_Code_Section_container->bodies[i]->body_size; ++j) { -      printf("%02x ", 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", W_Data_Section_container->id); -  printf("data_section_payloadlength:%d\n", -         W_Data_Section_container->payloadlength); -  printf("data seg count:%d\n", W_Data_Section_container->count); +  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 seg count:%d\n", lib_ret->obj->W_Data_Section_container->count); -  for (int i = 0; i < W_Data_Section_container->count; ++i) { -    printf("index:%d\n", W_Data_Section_container->entries[i]->index); -    printf("size:%d\n", W_Data_Section_container->entries[i]->size); +  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("code:\n"); -    for (int j = 0; j < W_Data_Section_container->entries[i]->size; ++j) { -      printf("%c ", 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 ", W_Data_Section_container->entries[i]->offset->code[j]); -      if (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++;      }      printf("\n");    } - -  release_all(); +#endif + +  printf("sizeof magic:%d\n", sizeof(magic_number)); +  printf("sizeof version:%d\n", sizeof(version)); +  printf("current void count:%d\n", lib_ret->current_void_count); +  printf("void_train first:0x%x\n", lib_ret->void_train[0]); +  printf("void_train first:0x%x\n", lib_ret->void_train[1]); +  printf("void_train self address:0x%x\n", lib_ret->void_train); +  //free(lib_ret->void_train[0]); +  //release_all(lib_ret->void_train, lib_ret->current_void_count); +  //free(lib_ret->void_train[2]); +  //free(lib_ret->void_train[1]); +  //free(lib_ret->void_train[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; +    free(lib_ret->void_train[i]); +  } +  free(lib_ret->void_train); +  free(lib_ret->obj); +  free(lib_ret);    return 0;  } diff --git a/bruiser/autogen/wasm/ft/makefile b/bruiser/autogen/wasm/ft/makefile index 86f0a6b..be67649 100644 --- a/bruiser/autogen/wasm/ft/makefile +++ b/bruiser/autogen/wasm/ft/makefile @@ -53,7 +53,7 @@ LD_FLAGS+=$(EXTRA_LD_FLAGS)  .PHONY:all clean help ASM SO TAGS -all:$(TARGET) +all:$(TARGET) $(TARGET)-dbg  everything:$(TARGET) A ASM SO $(TARGET)-static $(TARGET)-dbg TAGS $(TARGET)-cov @@ -82,10 +82,10 @@ $(TARGET): $(TARGET).o read.o aggregate.o structs.o  $(TARGET)-static: $(TARGET).o read.o aggregate.o structs.o  	$(CC) $^ $(LD_FLAGS) -static -o $@ -$(TARGET)-dbg: $(TARGET).odbg read.o aggregate.o structs.o +$(TARGET)-dbg: $(TARGET).odbg read.odbg aggregate.odbg structs.odbg  	$(CC) $^ $(LD_FLAGS) -g -o $@ -$(TARGET)-cov: $(TARGET).ocov read.o aggregate.o structs.o +$(TARGET)-cov: $(TARGET).ocov read.ocov aggregate.ocov structs.ocov  	$(CC) $^ $(LD_FLAGS) $(COV_LD) -o $@  cov: @@ -116,7 +116,13 @@ $(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 +	ar rcs $(TARGET).a $(TARGET).o read.o aggregate.o structs.o + +valgrind: $(TARGET) +	valgrind --leak-check=yes $(TARGET) + +test: $(TARGET) +	$(TARGET)  clean:  	rm -f *.o *.dis *.odbg *.ocov *~ $(TARGET) $(TARGET).so $(TARGET)-static $(TARGET)-dbg $(TARGET).a $(TARGET)-cov | 
