diff options
Diffstat (limited to '')
| -rwxr-xr-x | main.py | 56 | ||||
| -rwxr-xr-x | run.sh | 2 | ||||
| -rw-r--r-- | test/autowasm.c | 171 | ||||
| -rw-r--r-- | text.py | 13 | 
4 files changed, 130 insertions, 112 deletions
| @@ -329,10 +329,10 @@ class CodeGen(object):                                      read_source.write(text.c_void_manager_proto.replace("XXX", "dummy->" + cond.attrib["name"]));                                      self.malloc_list.append(C_Obj(ref_node.attrib["name"], [elem.tag, child.tag]))                                      if child_count == 1: -                                        for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + cond.attrib["name"]) + ";\n" +                                        for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + cond.attrib["name"]).replace("ZZZ", self.argparser.args.name + "_lib_ret->void_train") + ";\n"                                          read_source.write(for_read)                                      elif child_count > 1: -                                        for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + cond.attrib["name"] + "[i]") + ";\n" +                                        for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + cond.attrib["name"] + "[i]").replace("ZZZ", self.argparser.args.name + "_lib_ret->void_train") + ";\n"                                          read_source.write(for_read)                                      else: # child_count == -1                                          count_name_str = cond.attrib["count"][6:] @@ -340,7 +340,7 @@ class CodeGen(object):                                          read_source.write("dummy->" + cond.attrib["name"] + " = " + "malloc(sizeof(void*)*" + "dummy->" + get_node_name(count_name_str, child) + ");\n")                                          read_source.write(text.c_void_manager_proto.replace("XXX", "dummy->" + cond.attri["name"]));                                          self.malloc_list.append(C_Obj("sizeof(void*)*dummy->"+get_node_name(count_name_str, child), [elem.attrib["name"], child.attrib["name"], cond.arrtib["name"]])) -                                        for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + cond.attrib["name"] + "[i]") + ";\n" +                                        for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + cond.attrib["name"] + "[i]").replace("ZZZ", self.argparser.args.name + "_lib_ret->void_train") + ";\n"                                          read_source.write(text.simple_loop.replace("YYY", for_read).replace("XXX", "dummy->" + get_node_name(count_name_str, child)))                                      read_source.write("}\n")                                  else: @@ -385,17 +385,17 @@ class CodeGen(object):                          if ref_node:                              ref_node_name = pointer_remover(ref_node.attrib["name"])                              if child_count == 1: -                                for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + child.attrib["name"]) + ";\n" +                                for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + child.attrib["name"]).replace("ZZZ", self.argparser.args.name + "_lib_ret->void_train") + ";\n"                                  read_source.write("dummy->" + child.attrib["name"] + "=" + for_read)                              elif child_count > 1: -                                for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + child.attrib["name"] + "[i]") + ";\n" +                                for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + child.attrib["name"] + "[i]").replace("ZZZ", self.argparser.args.name + "_lib_ret->void_train") + ";\n"                                  read_source.write("dummy->" + child.attrib["name"] + "=" + for_read)                              else: # child_count == -1                                  count_name_str = child.attrib["count"][6:]                                  read_source.write("if (" + "dummy->" + get_node_name(count_name_str, elem) + ")\n")                                  read_source.write("dummy->" + child.attrib["name"] + " = " + "malloc(sizeof(void*)*" + "dummy->" + get_node_name(count_name_str, elem) + ");\n")                                  read_source.write(text.c_void_manager_proto.replace("XXX", "dummy->" + child.attrib["name"])); -                                for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + child.attrib["name"] + "[i]") + ";\n" +                                for_read = text.c_read_elem_sig_2.replace("XXX", ref_node_name).replace("YYY", "dummy->" + child.attrib["name"] + "[i]").replace("ZZZ", self.argparser.args.name + "_lib_ret->void_train") + ";\n"                                  read_source.write(text.simple_loop.replace("YYY", "dummy->" + child.attrib["name"] + "[i]=" + for_read).replace("XXX", "dummy->" + get_node_name(count_name_str, elem)))                          else:                              for_read = str() @@ -464,29 +464,40 @@ class CodeGen(object):          void_source = open(self.aggregate_source, "w")          void_source_h = open(self.aggregate_source_h, "w")          void_source.write("\n// automatically generated by faultreiber\n") +        void_source_h.write("\n// automatically generated by faultreiber\n")          void_source.write("// " + self.dnt + "\n") +        void_source_h.write("// " + self.dnt + "\n")          void_source.write('#include "./structs.h"\n')          void_source.write('#include "./read.h"\n')          void_source.write("#include <stdlib.h>\n") -        void_source.write("void** void_train;\n") -        void_source.write("uint64_t current_void_size = 0U;\n") -        void_source.write("uint64_t current_void_count = 0U;\n") +        #void_source.write("void** void_train;\n") +        #void_source.write("uint64_t current_void_size = 0U;\n") +        #void_source.write("uint64_t current_void_count = 0U;\n")          void_source_h.write('#ifndef FT_AGGREGATE_H\n#define FT_AGGREGATE_H\n')          void_source_h.write('#ifdef __cplusplus\nextern "C" {\n#endif\n')          void_source_h.write('#include "./structs.h"\n')          # generating the extern declarations and definitions +        void_source_h.write("typedef struct {\n")          for elem in self.read_elems:              count = get_elem_count(elem)              size = get_elem_size(elem)              if count != 1: -                void_source_h.write("extern " + elem.attrib["name"] + "** " + elem.attrib["name"] + "_container;\n") -                void_source.write(elem.attrib["name"] + "** " + elem.attrib["name"] + "_container;\n") +                void_source_h.write(elem.attrib["name"] + "** " + elem.attrib["name"] + "_container;\n") +                #void_source.write(elem.attrib["name"] + "** " + elem.attrib["name"] + "_container;\n")              else: -                void_source_h.write("extern " + elem.attrib["name"] + "* " + elem.attrib["name"] + "_container;\n") -                void_source.write(elem.attrib["name"] + "* " + elem.attrib["name"] + "_container;\n") +                void_source_h.write(elem.attrib["name"] + "* " + elem.attrib["name"] + "_container;\n") +                #void_source.write(elem.attrib["name"] + "* " + elem.attrib["name"] + "_container;\n") +        void_source_h.write("}" + self.argparser.args.name + "_obj_t;\n") +        #void_source_h.write(self.argparser.args.name + "_obj_t* obj;\n") +        void_source_h.write("typedef struct {\n") +        void_source_h.write(self.argparser.args.name + "_obj_t* obj;\n") +        void_source_h.write("void** void_train;\n") +        void_source_h.write("uint64_t* current_void_size;\n") +        void_source_h.write("uint64_t* current_void_count;\n") +        void_source_h.write("}" + self.argparser.args.name + "_lib_ret_t;\n")          # end -        void_source.write("void malloc_all(void) {\n") -        void_source_h.write("void malloc_all(void);\n") +        #void_source.write("void malloc_all(void) {\n") +        #void_source_h.write("void malloc_all(void);\n")          count_int = int()          count_void = int()          read_count = len(self.read_elems) @@ -524,7 +535,11 @@ class CodeGen(object):                  count_int = 0                  count_void = 0          void_source.write("}\n") -        void_source.write("void read_aggr_"+self.argparser.args.name+"(int _fd) {\n") +        void_source.write(self.argparser.args.name + "_lib_ret_t* read_aggr_"+self.argparser.args.name+"(int _fd) {\n") +        void_source.write(self.argparser.args.name + "_lib_ret_t* lib_ret = malloc(sizeof("+self.argparser.args.name+"_lib_ret_t"+"));\n") +        void_source.write("lib_ret->obj = malloc(sizeof("+self.argparser.args.name+"_obj_t"+"));\n") +        void_source.write("lib_ret->current_void_size = malloc(sizeof(uint64_t*));\n") +        void_source.write("lib_ret->current_void_count = malloc(sizeof(uint64_t*));\n")          for elem in self.read_elems:              if "isaggregate" in elem.attrib:                  for child in elem: @@ -538,7 +553,7 @@ class CodeGen(object):          agg_source = open(self.aggregate_source, "a")          agg_source_h = open(self.aggregate_source_h, "a")          print(self.argparser.args.name) -        agg_source_h.write("void read_aggr_"+self.argparser.args.name+"(int _fd);\n") +        agg_source_h.write(self.argparser.args.name + "_lib_ret_t* read_aggr_"+self.argparser.args.name+"(int _fd);\n")          agg_source.write("uint8_t eof = 0U;")          for elem in self.read_elems:              if "unorderedbegin" in elem.attrib: @@ -554,11 +569,12 @@ class CodeGen(object):                          agg_source.write(text.c_read_gen.replace("XXX", sign_name).replace("YYY", sign_type))                          agg_source.write("lseek(_fd, -sizeof(" + sign_type + "), SEEK_CUR);\n")                          agg_source.write("if (" + sign_name + "==" + child.text + "){\n") -            agg_source.write(elem.attrib["name"] + "_container = " + "ft_read_" + elem.attrib["name"] + "(_fd," + elem.attrib["name"] + "_container"  + ");\n") +            agg_source.write("lib_ret->obj->"+elem.attrib["name"] + "_container = " + "ft_read_" + elem.attrib["name"] + "(_fd, lib_ret->obj->" + elem.attrib["name"] + "_container"  + "lib_ret->void_train);\n")              if "unordered" in elem.attrib: agg_source.write("}\n")              if "unorderedend" in elem.attrib:                  agg_source.write("}while(0);\n") +            agg_source.write("return lib_ret;\n")          agg_source.write("}\n")      #FIXME-not handling double pointers @@ -571,6 +587,8 @@ class CodeGen(object):          agg_source.write("free(void_train[i]);\n}\n")          agg_source.write("free(void_train);\n")          agg_source.write("}\n") +        agg_source_h.write('#ifdef __cplusplus\n}\n#endif\n') +        agg_source_h.write("#endif //end of header guard\n\n")      def gen_return(self):          agg_source = open(self.aggregate_source, "a") @@ -692,7 +710,7 @@ class CodeGen(object):          self.gen_void_train()          self.gen_aggregate_read()          self.gen_release() -        self.gen_return() +        #self.gen_return()  # write code here  def premain(argparser): @@ -1,5 +1,5 @@  #!/bin/sh  cd $(dirname $0) -#"./faultreiber.py" --targetname autowasm --outdir ./test/ --structs ./test/struct.json --datetime --structsinclude ./resources/structsinclude.h --xml ./resources/wasm.xml  "./faultreiber.py" --targetname autowasm --outdir ./test/ --structs ./test/struct.json --xml ./resources/wasm.xml --name wasm +#"./faultreiber.py" --targetname autowasm --outdir ./test/ --structs ./test/struct.json --xml ./resources/wasm2.xml --name wasm  "clang-format" -i ./test/read.c ./test/structs.c ./test/structs.h ./test/aggregate.c ./test/aggregate.h ./test/read.h diff --git a/test/autowasm.c b/test/autowasm.c index 02b034c..769cc1e 100644 --- a/test/autowasm.c +++ b/test/autowasm.c @@ -9,127 +9,128 @@  #include "./read.h"  #include "./aggregate.h" +  #pragma weak main  int main (int argc, char** argv) {    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("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); +  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 (W_Global_Section_container == NULL) printf("global section doesnt exist.\n"); +  if (lib_ret->obj->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); +  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 < 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); +  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); +  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 < 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) { +  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) { +      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++; @@ -15,11 +15,10 @@ class text():      #c_read_elem_sig = "void ft_read_YYY(int _fd, XXX* dummyZZZ) {\n"      #c_read_elem_sig = "void ft_read_YYY(int _fd, XXX* dummy) {\n"      #c_read_elem_sig_h = "void ft_read_YYY(int _fd, XXX* dummy);\n" -    c_read_elem_sig = "void* ft_read_YYY(int _fd, XXX* dummy) {\n" -    c_read_elem_sig_h = "void* ft_read_YYY(int _fd, XXX* dummy);\n" +    c_read_elem_sig = "void* ft_read_YYY(int _fd, XXX* dummy, void** void_train) {\n" +    c_read_elem_sig_h = "void* ft_read_YYY(int _fd, XXX* dummy, void** void_train);\n"      c_read_elem_sig_1 = "ft_read_XXX(_fd)" -    c_read_elem_sig_2 = "ft_read_XXX(_fd, YYY)" -    #c_read_elem_sig_2 = "ft_read_XXX(_fd, &YYY)" +    c_read_elem_sig_2 = "ft_read_XXX(_fd, YYY, ZZZ)"      c_open_file = "int ft_read_file = open(_ft_file_path, RDONLY);\n"      c_function_close = "}\n"      c_function_dummy_dec = "XXX dummy;\n" @@ -84,7 +83,7 @@ int32_t read_until_delimiter(int _fd, uint8_t delimiter) {  }"""      c_void_manager = """ -void void_manager(void* ptr) { +void void_manager(void* ptr, void** void_train) {    if (current_void_size == 0) {      void_train = malloc(100*sizeof(void*));      current_void_size = 100; @@ -104,8 +103,8 @@ void void_manager(void* ptr) {      c_read_leb_128_u_sig = "uint64_t read_leb_128_u(int _fd, int max_size);\n"      c_read_until_delimiter_sig = "int32_t read_until_delimiter(int _fd, uint8_t delimiter);\n"      c_read_until_delimiter_proto = "read_until_delimiter(_fd, XXX)" -    c_void_manager_sig = "void void_manager(void* ptr);" -    c_void_manager_proto = "void_manager(XXX);" +    c_void_manager_sig = "void void_manager(void* ptr, void** void_train);" +    c_void_manager_proto = "void_manager(XXX, void_train);"      c_read_leb_macro_defs = """  #define READ_VAR_UINT_1(FD) read_leb128_u(FD, 1) | 
