]>
git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/python/lib/gdb/function/strfns.py
a620f4f35af673472024963b1ae397d130007e19
1 # Useful gdb string convenience functions.
2 # Copyright (C) 2012-2025 Free Software Foundation, Inc.
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.
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.
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/>.
17 """$_memeq, $_strlen, $_streq, $_regex"""
24 class _MemEq(gdb
.Function
):
25 """$_memeq - compare bytes of memory.
27 Usage: $_memeq (A, B, LEN)
30 True if LEN bytes at A and B compare equally."""
33 super(_MemEq
, self
).__init
__("_memeq")
35 def invoke(self
, a
, b
, length
):
37 raise ValueError("length must be non-negative")
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()
48 class _StrLen(gdb
.Function
):
49 """$_strlen - compute string length.
54 Length of string A, assumed to be a string in the current language."""
57 super(_StrLen
, self
).__init
__("_strlen")
64 class _StrEq(gdb
.Function
):
65 """$_streq - check string equality.
70 True if A and B are identical strings in the current language.
72 Example (amd64-linux):
74 cond $bpnum $_streq((char*) $rdi, "foo")"""
77 super(_StrEq
, self
).__init
__("_streq")
79 def invoke(self
, a
, b
):
80 return a
.string() == b
.string()
83 class _RegEx(gdb
.Function
):
84 """$_regex - check if a string matches a regular expression.
86 Usage: $_regex (STRING, REGEX)
89 True if string STRING (in the current language) matches the
90 regular expression REGEX."""
93 super(_RegEx
, self
).__init
__("_regex")
95 def invoke(self
, string
, regex
):
97 r
= re
.compile(regex
.string())
98 return bool(r
.match(s
))
101 # GDB will import us automagically via gdb/__init__.py.