在 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']