Display printable strings in memory Usage: MYNAME start end [minlen] MYNAME mapname [minlen] MYNAME (display all printable strings in binary - slow)
(self, *arg)
| 4874 | xinfo.options = ["register"] |
| 4875 | |
| 4876 | def strings(self, *arg): |
| 4877 | """ |
| 4878 | Display printable strings in memory |
| 4879 | Usage: |
| 4880 | MYNAME start end [minlen] |
| 4881 | MYNAME mapname [minlen] |
| 4882 | MYNAME (display all printable strings in binary - slow) |
| 4883 | """ |
| 4884 | (start, end, minlen) = normalize_argv(arg, 3) |
| 4885 | |
| 4886 | mapname = None |
| 4887 | if start is None: |
| 4888 | mapname = "binary" |
| 4889 | elif to_int(start) is None or (end < start): |
| 4890 | (mapname, minlen) = normalize_argv(arg, 2) |
| 4891 | |
| 4892 | if minlen is None: |
| 4893 | minlen = 1 |
| 4894 | |
| 4895 | if mapname: |
| 4896 | maps = peda.get_vmmap(mapname) |
| 4897 | else: |
| 4898 | maps = [(start, end, None, None)] |
| 4899 | |
| 4900 | if not maps: |
| 4901 | warning_msg("failed to get memory map for %s" % mapname) |
| 4902 | return |
| 4903 | |
| 4904 | text = "" |
| 4905 | regex_pattern = "[%s]{%d,}" % (re.escape(string.printable), minlen) |
| 4906 | p = re.compile(regex_pattern.encode('utf-8')) |
| 4907 | for (start, end, _, _) in maps: |
| 4908 | mem = peda.dumpmem(start, end) |
| 4909 | if not mem: continue |
| 4910 | found = p.finditer(mem) |
| 4911 | if not found: continue |
| 4912 | |
| 4913 | for m in found: |
| 4914 | text += "0x%x: %s\n" % (start+m.start(), string_repr(mem[m.start():m.end()].strip(), show_quotes=False)) |
| 4915 | |
| 4916 | pager(text) |
| 4917 | return |
| 4918 | |
| 4919 | def sgrep(self, *arg): |
| 4920 | """ |
nothing calls this directly
no test coverage detected