def armfw_elf_dm3xxvals_list(po, elffh): params_list, _, _, _, _, _ = armfw_elf_paramvals_extract_list(po, elffh, re_general_list) # print list of parameter values for par_name, par_info in params_list.items(): print("{:s}\t{:s}".format(par_name,par_info['str_value'])) if (po.verbose > 0): print("{:s}: Listed {:d} hardcoded values".format(po.elffile,len(params_list)))
def armfw_elf_dm3xxvals_update(po, elffh): """ Updates all hardcoded values in firmware from JSON format text file. """ pub_params_list, glob_params_list, elf_sections, cs, elfobj, asm_arch = armfw_elf_paramvals_extract_list(po, elffh, re_general_list) if len(pub_params_list) <= 0: raise ValueError("No known values found in ELF file.") with open(po.valfile) as valfile: nxparams_list = json.load(valfile) # Change section data buffers to bytearrays, so we can change them easily for section_name, section in elf_sections.items(): section['data'] = bytearray(section['data']) update_count = 0 for nxpar in nxparams_list: if not nxpar['name'] in pub_params_list: eprint("{:s}: Value '{:s}' not found in ELF file.".format(po.elffile,nxpar['name'])) continue par_info = pub_params_list[nxpar['name']] update_performed = armfw_elf_publicval_update(po, asm_arch, elf_sections, re_general_list, glob_params_list, par_info, nxpar['setValue']) if update_performed: depparams_list = armfw_elf_paramvals_get_depend_list(glob_params_list, par_info, nxpar['setValue']) for deppar in depparams_list: update_performed = armfw_elf_publicval_update(po, asm_arch, elf_sections, re_general_list, glob_params_list, deppar, deppar['setValue']) update_count += 1 if (po.verbose > 0): print("{:s}: Updated {:d} out of {:d} hardcoded values".format(po.elffile,update_count,len(pub_params_list))) # Now update the ELF file for section_name, section in elf_sections.items(): elfsect = elfobj.get_section_by_name(section_name) elfsect.set_data(section['data']) elfobj.set_section_by_name(section_name, elfsect) if not po.dry_run: elfobj.write_changes()
def armfw_elf_dm3xxvals_update(po, elffh): """ Updates all hardcoded values in firmware from JSON format text file. """ pub_params_list, glob_params_list, elf_sections, cs, elfobj, asm_arch = armfw_elf_paramvals_extract_list( po, elffh, re_general_list, 'arm') if len(pub_params_list) <= 0: raise ValueError("No known values found in ELF file.") with open(po.valfile) as valfile: nxparams_list = json.load(valfile) # Change section data buffers to bytearrays, so we can change them easily for section_name, section in elf_sections.items(): section['data'] = bytearray(section['data']) update_count = armfw_elf_paramvals_update_list(po, asm_arch, re_general_list, pub_params_list, glob_params_list, elf_sections, nxparams_list) if (po.verbose > 0): print("{:s}: Updated {:d} out of {:d} hardcoded values".format( po.elffile, update_count, len(pub_params_list))) # Now update the ELF file for section_name, section in elf_sections.items(): elfsect = elfobj.get_section_by_name(section_name) elfsect.set_data(section['data']) elfobj.set_section_by_name(section_name, elfsect) if not po.dry_run: elfobj.write_changes()
def armfw_elf_lbstm32_extract(po, elffh): """ Extracts all values from firmware to JSON format text file. """ params_list, _, _, _, _, _ = armfw_elf_paramvals_extract_list( po, elffh, re_general_list, 'thumb') if len(params_list) <= 0: raise ValueError("No known values found in ELF file.") if not po.dry_run: valfile = open(po.valfile, "w") else: valfile = io.StringIO() valfile.write("[\n") full_index = 0 for par_name, par_info in params_list.items(): if (full_index != 0): valfile.write(",\n") valfile.write("\t{\n") for ppname in ('index', ): valfile.write("\t\t\"{:s}\" : {:d}".format(ppname, full_index)) for ppname in ('description', ): valfile.write(",\n") valfile.write("\t\t\"{:s}\" : \"{:s}\"".format( ppname, par_info[ppname])) for ppname in ('minValue', 'maxValue', 'defaultValue'): if not ppname in par_info: continue valfile.write(",\n") if re.match(r"^(0[Xx][0-9a-fA-F]+|[0-9]+)$", par_info['str_value']): valfile.write("\t\t\"{:s}\" : {:s}".format( ppname, par_info[ppname])) else: valfile.write("\t\t\"{:s}\" : \"{:s}\"".format( ppname, par_info[ppname])) for ppname in ('setValue', ): valfile.write(",\n") if re.fullmatch(r"^(0[Xx][0-9a-fA-F]+|[0-9]+)$", par_info['str_value']): valfile.write("\t\t\"{:s}\" : {:s}".format( ppname, par_info['str_value'])) else: valfile.write("\t\t\"{:s}\" : \"{:s}\"".format( ppname, par_info['str_value'])) for ppname in ('name', ): valfile.write(",\n") valfile.write("\t\t\"{:s}\" : \"{:s}\"".format(ppname, par_name)) valfile.write("\n") valfile.write("\t}") full_index += 1 valfile.write("\n") valfile.write("]\n") if (po.verbose > 0): print("{:s}: Extracted {:d} hardcoded values".format( po.elffile, len(params_list))) valfile.close()
def armfw_elf_dm3xxvals_extract(po, elffh): """ Extracts all values from firmware to JSON format text file. """ params_list, _, _, _, _, _ = armfw_elf_paramvals_extract_list(po, elffh, re_general_list) if len(params_list) <= 0: raise ValueError("No known values found in ELF file.") if not po.dry_run: valfile = open(po.valfile, "w") else: valfile = io.StringIO() armfw_elf_paramvals_export_json(po, params_list, valfile) valfile.close()
def armfw_elf_dm3xxvals_extract(po, elffh): """ Extracts all values from firmware to JSON format text file. """ params_list, _, _, _, _, _ = armfw_elf_paramvals_extract_list(po, elffh, re_general_list) if len(params_list) <= 0: raise ValueError("No known values found in ELF file.") if not po.dry_run: valfile = open(po.valfile, "w") else: valfile = io.StringIO() armfw_elf_paramvals_export_json(po, params_list, valfile) valfile.close()
def armfw_elf_dm3xxvals_update(po, elffh): """ Updates all hardcoded values in firmware from JSON format text file. """ pub_params_list, glob_params_list, elf_sections, cs, elfobj, asm_arch = armfw_elf_paramvals_extract_list(po, elffh, re_general_list) if len(pub_params_list) <= 0: raise ValueError("No known values found in ELF file.") with open(po.valfile) as valfile: nxparams_list = json.load(valfile) # Change section data buffers to bytearrays, so we can change them easily for section_name, section in elf_sections.items(): section['data'] = bytearray(section['data']) update_count = armfw_elf_paramvals_update_list(po, asm_arch, re_general_list, pub_params_list, glob_params_list, elf_sections, nxparams_list) if (po.verbose > 0): print("{:s}: Updated {:d} out of {:d} hardcoded values".format(po.elffile,update_count,len(pub_params_list))) # Now update the ELF file for section_name, section in elf_sections.items(): elfsect = elfobj.get_section_by_name(section_name) elfsect.set_data(section['data']) elfobj.set_section_by_name(section_name, elfsect) if not po.dry_run: elfobj.write_changes()
def armfw_elf_dm3xxvals_mapfile(po, elffh): _, params_list, elf_sections, _, _, asm_arch = armfw_elf_paramvals_extract_list( po, elffh, re_general_list, 'arm') armfw_elf_paramvals_export_mapfile(po, params_list, elf_sections, asm_arch, sys.stdout)
def armfw_elf_dm3xxvals_list(po, elffh): params_list, _, _, _, _, _ = armfw_elf_paramvals_extract_list( po, elffh, re_general_list, 'arm') # print list of parameter values armfw_elf_paramvals_export_simple_list(po, params_list, sys.stdout)
def armfw_elf_dm3xxvals_mapfile(po, elffh): _, params_list, elf_sections, _, _, asm_arch = armfw_elf_paramvals_extract_list(po, elffh, re_general_list) armfw_elf_paramvals_export_mapfile(po, params_list, elf_sections, asm_arch, sys.stdout)
def armfw_elf_dm3xxvals_list(po, elffh): params_list, _, _, _, _, _ = armfw_elf_paramvals_extract_list(po, elffh, re_general_list) # print list of parameter values armfw_elf_paramvals_export_simple_list(po, params_list, sys.stdout)