コード例 #1
0
 def create_elf_header(self) -> str:
     root = UX.get_codehawk_xml_header(self.name, "elf-header")
     xelfheader = ET.Element("elf-header")
     xfh = ET.Element("elf-file-header")
     xfh.set("e_ehsize", "52")
     xfh.set("e_entry", "0x1000")
     xfh.set("e_machine", self.machine_type)
     xfh.set("e_phentsize", "32")
     xfh.set("e_phnum", "0")
     xfh.set("e_phoff", "0x34")
     xfh.set("e_shentsize", "40")
     xfh.set("e_shnum", "1")
     xfh.set("e_shoff", "0x0")
     xfh.set("e_shstrndx", "0")
     xfh.set("e_type", "2")  # executable file
     xfh.set("e_version", "0x1")
     xph = ET.Element("elf-program-headers")
     xsh = ET.Element("elf-section-headers")
     xsh16 = ET.Element("section-header")
     xsh16 = self.get_section_header()
     xsh16.set("index", "16")
     xsh.append(xsh16)
     xelfheader.append(xfh)
     xelfheader.append(xph)
     xelfheader.append(xsh)
     root.append(xelfheader)
     tree = ET.ElementTree(root)
     return UX.doc_to_pretty(tree)
コード例 #2
0
 def to_xml(self, filename: str) -> ET.ElementTree:
     root = UX.get_codehawk_xml_header(filename, "system-userdata")
     tree = ET.ElementTree(root)
     snode = ET.Element("system-info")
     root.append(snode)
     for tag in sorted(self.userdata):
         self.userdata[tag].to_xml(snode)
     return tree
コード例 #3
0
 def save_struct_files(self, path: str, xfile: str) -> None:
     savedstructs: Dict[str, int] = {}
     for name in self.structtypes:
         filename = UF.get_user_struct_filename(path, xfile, name)
         root = UX.get_codehawk_xml_header(xfile, "struct")
         tree = ET.ElementTree(root)
         snode = ET.Element("struct")
         self.structtypes[name].to_xml(snode)
         root.append(snode)
         snode.set("name", name)
         with open(filename, "w") as fp:
             fp.write(UX.doc_to_pretty(tree))
コード例 #4
0
 def _make_userdata_file(self) -> None:
     ufilename = UF.get_user_system_data_filename(self.path, self.filename)
     root = UX.get_codehawk_xml_header(self.filename, "system-userdata")
     tree = ET.ElementTree(root)
     snode = ET.Element("system-info")
     root.append(snode)
     tags = [
         "settings", "data-blocks", "function-entry-points",
         "function-names", "non-returning-functions", "esp-adjustments"
     ]
     children = [ET.Element(t) for t in tags]
     snode.extend(children)
     snode.extend(UX.create_xml_userdata(self.hints))
     with open(ufilename, "w") as fp:
         fp.write(UX.doc_to_pretty(tree))
コード例 #5
0
 def create_elf_section(self) -> str:
     root = UX.get_codehawk_xml_header(self.name, "raw-section")
     xsec = ET.Element("raw-section")
     xsec.set("index", "16")
     xsec.set("size", str(self.size))
     xsec.set("vaddr", "0x1000")
     xhex = ET.Element("hex-data")
     xhex.set("blocks", "1")
     xblock = ET.Element("ablock")
     xblock.set("block", "0")
     self._add_codelines(xblock)
     xhex.append(xblock)
     xsec.append(xhex)
     xsh = self.get_section_header()
     xsec.append(xsh)
     root.append(xsec)
     tree = ET.ElementTree(root)
     return UX.doc_to_pretty(tree)
コード例 #6
0
 def _make_userdata_file(self):
     userdata = self.fixup
     ufilename = UF.get_user_system_data_filename(self.path,self.filename)
     if os.path.exists(ufilename):
         print('File: ' + os.path.basename(ufilename)
                   + ' already exists; skip file creation')
         return
     ufile = open(ufilename,'w')
     root = UX.get_codehawk_xml_header(self.filename,'system-userdata')
     tree = ET.ElementTree(root)
     snode = ET.Element('system-info')
     root.append(snode)
     tags = [ 'settings', 'data-blocks', 'function-entry-points', 'function-names',
                  'non-returning-functions', 'esp-adjustments' ]
     children = [ ET.Element(t) for t in tags ]
     snode.extend(children)
     snode.extend(UX.create_xml_userdata(self.fixup))
     ufile.write(UX.doc_to_pretty(tree))