GDB (xrefs)
strfns.py
Go to the documentation of this file.
1 # Useful gdb string convenience functions.
2 # Copyright (C) 2012-2015 Free Software Foundation, Inc.
3 
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 
17 """$_memeq, $_strlen, $_streq, $_regex"""
18 
19 import gdb
20 import re
21 
22 
23 class _MemEq(gdb.Function):
24  """$_memeq - compare bytes of memory
25 
26 Usage:
27  $_memeq(a, b, len)
28 
29 Returns:
30  True if len bytes at a and b compare equally.
31 """
32  def __init__(self):
33  super(_MemEq, self).__init__("_memeq")
34 
35  def invoke(self, a, b, length):
36  if length < 0:
37  raise ValueError("length must be non-negative")
38  if length == 0:
39  return True
40  # The argument(s) to vector are [low_bound,]high_bound.
41  byte_vector = gdb.lookup_type("char").vector(length - 1)
42  ptr_byte_vector = byte_vector.pointer()
43  a_ptr = a.reinterpret_cast(ptr_byte_vector)
44  b_ptr = b.reinterpret_cast(ptr_byte_vector)
45  return a_ptr.dereference() == b_ptr.dereference()
46 
47 
48 class _StrLen(gdb.Function):
49  """$_strlen - compute string length
50 
51 Usage:
52  $_strlen(a)
53 
54 Returns:
55  Length of string a, assumed to be a string in the current language.
56 """
57  def __init__(self):
58  super(_StrLen, self).__init__("_strlen")
59 
60  def invoke(self, a):
61  s = a.string()
62  return len(s)
63 
64 
65 class _StrEq(gdb.Function):
66  """$_streq - check string equality
67 
68 Usage:
69  $_streq(a, b)
70 
71 Returns:
72  True if a and b are identical strings in the current language.
73 
74 Example (amd64-linux):
75  catch syscall open
76  cond $bpnum $_streq((char*) $rdi, "foo")
77 """
78  def __init__(self):
79  super(_StrEq, self).__init__("_streq")
80 
81  def invoke(self, a, b):
82  return a.string() == b.string()
83 
84 
85 class _RegEx(gdb.Function):
86  """$_regex - check if a string matches a regular expression
87 
88 Usage:
89  $_regex(string, regex)
90 
91 Returns:
92  True if string str (in the current language) matches the
93  regular expression regex.
94 """
95  def __init__(self):
96  super(_RegEx, self).__init__("_regex")
97 
98  def invoke(self, string, regex):
99  s = string.string()
100  r = re.compile(regex.string())
101  return bool(r.match(s))
102 
103 
104 # GDB will import us automagically via gdb/__init__.py.
105 _MemEq()
106 _StrLen()
107 _StrEq()
108 _RegEx()
def invoke(self, string, regex)
Definition: strfns.py:98
def invoke(self, a)
Definition: strfns.py:60
def invoke(self, a, b)
Definition: strfns.py:81
def invoke(self, a, b, length)
Definition: strfns.py:35
const ULONGEST const LONGEST len
Definition: target.h:309