#!/usr/bin/env python3 # # Copyright (c) 2021 Intel Corporation # # SPDX-License-Identifier: Apache-2.0 """ Utilities for Dictionary-based Logging Parser """ import binascii def convert_hex_file_to_bin(hexfile): """This converts a file in hexadecimal to binary""" bin_data = b'' with open(hexfile, "r", encoding="iso-8859-1") as hfile: for line in hfile.readlines(): hex_str = line.strip() bin_str = binascii.unhexlify(hex_str) bin_data += bin_str return bin_data def extract_one_string_in_section(section, str_ptr): """Extract one string in an ELF section""" data = section['data'] max_offset = section['size'] offset = str_ptr - section['start'] if offset < 0 or offset >= max_offset: return None ret_str = "" while (offset < max_offset) and (data[offset] != 0): ret_str += chr(data[offset]) offset += 1 return ret_str def find_string_in_mappings(string_mappings, str_ptr): """ Find string pointed by string_ptr in the string mapping list. Return None if not found. """ if string_mappings is None: return None if len(string_mappings) == 0: return None if str_ptr in string_mappings: return string_mappings[str_ptr] # No direct match on pointer value. # This may be a combined string. So check for that. for ptr, string in string_mappings.items(): if ptr <= str_ptr < (ptr + len(string)): whole_str = string_mappings[ptr] return whole_str[str_ptr - ptr:] return None