在 gdb 中添加一个 python 函数
Add a python function into gdb
我发现自己经常使用 python 解释器来进行非常基本的字节转换,例如:
>>> ords = lambda s: [hex(ord(c)) for c in s]
>>> ords('Help')
['0x48', '0x65', '0x6c', '0x70']
有没有办法将 python 函数添加到 gdb
中,这样我就可以键入 ords('Help')
并调用上面的函数?如果是这样,how/where 我会定义 python 函数吗?
相关:https://sourceware.org/gdb/onlinedocs/gdb/Python-API.html
是的,您可以使用 GDB Python API。
ords.py:
import gdb
class ordinal(gdb.Command):
def __init__(self):
super(ordinal, self).__init__("ords", gdb.COMMAND_USER)
def invoke(self, argument, fromtty):
argv = gdb.string_to_argv(argument)
if len(argv) > 0:
argv[0] = argv[0].strip('()')
print([hex(ord(c)) for c in argv[0]])
else:
print("No arguments supplied")
ordinal()
在 GDB 中(我使用的是 GDB 8.3.1):
(gdb) source ords.py
(gdb) ords('Help')
['0x48', '0x65', '0x6c', '0x70']
我发现自己经常使用 python 解释器来进行非常基本的字节转换,例如:
>>> ords = lambda s: [hex(ord(c)) for c in s]
>>> ords('Help')
['0x48', '0x65', '0x6c', '0x70']
有没有办法将 python 函数添加到 gdb
中,这样我就可以键入 ords('Help')
并调用上面的函数?如果是这样,how/where 我会定义 python 函数吗?
相关:https://sourceware.org/gdb/onlinedocs/gdb/Python-API.html
是的,您可以使用 GDB Python API。
ords.py:
import gdb
class ordinal(gdb.Command):
def __init__(self):
super(ordinal, self).__init__("ords", gdb.COMMAND_USER)
def invoke(self, argument, fromtty):
argv = gdb.string_to_argv(argument)
if len(argv) > 0:
argv[0] = argv[0].strip('()')
print([hex(ord(c)) for c in argv[0]])
else:
print("No arguments supplied")
ordinal()
在 GDB 中(我使用的是 GDB 8.3.1):
(gdb) source ords.py
(gdb) ords('Help')
['0x48', '0x65', '0x6c', '0x70']