def dump_data_ascii(self, ctx, lines): N = 128 # read by block of 128 bytes ad = ctx.entry s = self.binary.get_section(ad) print(hex(ad)) s.print_header() l = 0 ascii_str = [] ad_str = -1 while l < lines: buf = s.read(ad, N) if not buf: break i = 0 while i < len(buf): if ad > s.end: return j = i while j < len(buf): c = buf[j] if c not in BYTES_PRINTABLE_SET: break if ad_str == -1: ad_str = ad ascii_str.append(c) j += 1 if c != 0 and j == len(buf): ad += j - i break if c == 0 and len(ascii_str) >= 2: if self.is_label(ad_str): print(color_symbol(self.get_symbol(ad_str))) print_no_end(color_addr(ad_str)) print_no_end( color_string("\"" + "".join(map(get_char, ascii_str)) + "\"")) print(", 0") ad += j - i i = j else: if self.is_label(ad): print(color_symbol(self.get_symbol(ad))) print_no_end(color_addr(ad)) print("0x%.2x " % buf[i]) ad += 1 i += 1 ad_str = -1 ascii_str = [] l += 1 if l >= lines: return
def dump_data(self, ctx, lines, size_word): s = self.binary.get_section(ctx.entry_addr) s.print_header() ad = ctx.entry_addr for w in self.read_array(ctx.entry_addr, lines, size_word, s): if ad in self.binary.reverse_symbols: print(color_symbol(self.binary.reverse_symbols[ad][0])) print_no_end(color_addr(ad)) print_no_end("0x%.2x" % w) section = self.binary.get_section(w) if section is not None: print_no_end(" (") print_no_end(color_section(section.name)) print_no_end(")") if size_word >= 4 and w in self.binary.reverse_symbols: print_no_end(" ") print_no_end( color_symbol(self.binary.reverse_symbols[w][0])) ad += size_word print()
def dump_data_ascii(self, ctx, lines): N = 128 # read by block of 128 bytes ad = ctx.entry s = self.binary.get_section(ad) print(hex(ad)) s.print_header() l = 0 ascii_str = [] ad_str = -1 while l < lines: buf = s.read(ad, N) if not buf: break i = 0 while i < len(buf): if ad > s.end: return j = i while j < len(buf): c = buf[j] if c not in BYTES_PRINTABLE_SET: break if ad_str == -1: ad_str = ad ascii_str.append(c) j += 1 if c != 0 and j == len(buf): ad += j - i break if c == 0 and len(ascii_str) >= 2: if self.is_label(ad_str): print(color_symbol(self.get_symbol(ad_str))) print_no_end(color_addr(ad_str)) print_no_end(color_string( "\"" + "".join(map(get_char, ascii_str)) + "\"")) print(", 0") ad += j - i i = j else: if self.is_label(ad): print(color_symbol(self.get_symbol(ad))) print_no_end(color_addr(ad)) print("0x%.2x " % buf[i]) ad += 1 i += 1 ad_str = -1 ascii_str = [] l += 1 if l >= lines: return
def print_symbols(self, print_sections, sym_filter=None): if sym_filter is not None: sym_filter = sym_filter.lower() for addr in self.binary.reverse_symbols: sy = self.binary.reverse_symbols[addr] if sym_filter is None or sym_filter in sy.lower(): sec_name, _ = self.binary.is_address(addr) print_no_end(color_addr(addr) + " " + color_symbol("<" + sy + ">")) if print_sections and sec_name is not None: print_no_end(" (" + color_section(sec_name) + ")") print()
def dump_data(self, ctx, lines, size_word): s_name, s_start, s_end = self.binary.get_section_meta(ctx.entry_addr) self.print_section_meta(s_name, s_start, s_end) ad = ctx.entry_addr for w in self.read_array(ctx.entry_addr, lines, size_word): if ad in self.binary.reverse_symbols: print(color_symbol(self.binary.reverse_symbols[ad])) print_no_end(color_addr(ad)) print_no_end("0x%.2x" % w) sec_name, is_data = self.binary.is_address(w) if sec_name is not None: print_no_end(" (") print_no_end(color_section(sec_name)) print_no_end(")") if size_word >= 4 and w in self.binary.reverse_symbols: print_no_end(" ") print_no_end(color_symbol(self.binary.reverse_symbols[w])) ad += size_word print()
def print_symbols(self, print_sections, sym_filter=None): if sym_filter is not None: sym_filter = sym_filter.lower() for addr in self.binary.reverse_symbols: sy = self.binary.reverse_symbols[addr] if sym_filter is None or sym_filter in sy.lower(): sec_name, _ = self.binary.is_address(addr) print_no_end( color_addr(addr) + " " + color_symbol("<" + sy + ">")) if print_sections and sec_name is not None: print_no_end(" (" + color_section(sec_name) + ")") print()
def dump_data(self, ctx, lines, size_word): ad = ctx.entry s = self.binary.get_section(ad) s.print_header() for w in self.read_array(ad, lines, size_word, s): if self.is_label(ad): print(color_symbol(self.get_symbol(ad))) print_no_end(color_addr(ad)) print_no_end("0x%.2x" % w) section = self.binary.get_section(w) if section is not None: print_no_end(" (") print_no_end(color_section(section.name)) print_no_end(")") if size_word >= 4 and self.is_label(w): print_no_end(" ") print_no_end(color_symbol(self.get_symbol(w))) ad += size_word print()
def dump_data(self, ctx, lines, size_word): s = self.binary.get_section(ctx.entry_addr) s.print_header() ad = ctx.entry_addr for w in self.read_array(ctx.entry_addr, lines, size_word, s): if ad in self.binary.reverse_symbols: print(color_symbol(self.binary.reverse_symbols[ad][0])) print_no_end(color_addr(ad)) print_no_end("0x%.2x" % w) section = self.binary.get_section(w) if section is not None: print_no_end(" (") print_no_end(color_section(section.name)) print_no_end(")") if size_word >= 4 and w in self.binary.reverse_symbols: print_no_end(" ") print_no_end(color_symbol(self.binary.reverse_symbols[w][0])) ad += size_word print()
def print_symbol(self, addr): print_no_end(color_symbol("<" + self.binary.reverse_symbols[addr] + ">"))
def print_symbol(self, addr): print_no_end(color_symbol(self.binary.reverse_symbols[addr]))
def dump_data(self, ctx, lines, size_word): _, mode = self.binary.get_arch() if mode & self.capstone.CS_MODE_BIG_ENDIAN: endian = ">" else: endian = "<" if size_word == 1: unpack_str = endian + "B" elif size_word == 2: unpack_str = endian + "H" elif size_word == 4: unpack_str = endian + "L" elif size_word == 8: unpack_str = endian + "Q" N = size_word * 64 addr = ctx.entry_addr s_name, s_start, s_end = self.binary.get_section_meta(ctx.entry_addr) self.print_section_meta(s_name, s_start, s_end) l = 0 while l < lines: buf = self.binary.section_stream_read(addr, N) if not buf: break i = 0 while i < len(buf): b = buf[i:i + size_word] if addr >= s_end: return if len(b) != size_word: for c in buf: print_no_end(color_addr(addr)) print("0x%.2x" % c) return if addr in self.binary.reverse_symbols: print(color_symbol(self.binary.reverse_symbols[addr])) print_no_end(color_addr(addr)) w = struct.unpack(unpack_str, b)[0] print_no_end("0x%.2x" % w) sec_name, is_data = self.binary.is_address(w) if sec_name is not None and \ sec_name not in [".comment", ".shstrtab"]: print_no_end(" (") print_no_end(color_section(sec_name)) print_no_end(")") if size_word >= 4 and w in self.binary.reverse_symbols: print_no_end(" ") print_no_end(color_symbol(self.binary.reverse_symbols[w])) print() addr += size_word i += size_word l += 1 if l >= lines: return