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)
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
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))
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))
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)
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))