是否可以使用类似的方法找到函数指针 SBTypelldb.target.FindTypes()
鉴于 DWARF 信息似乎只包含该类型的 typedef,而不迭代所有模块中的所有类型?
所以在我的 C++ 代码中我有:
typedef struct _object {
PyObject_HEAD
} PyObject;
typedef void (*PythonToCppFunc)(PyObject*,void*);
当我执行时
script print lldb.target.FindFirstType("PythonToCppFunc").GetName()
script print lldb.target.FindFirstType("PythonToCppFunc").GetCanonicalType()
script print lldb.target.FindFirstType("PythonToCppFunc").GetCanonicalType().GetName()
I get
PythonToCppFunc
void (*)(struct _object *, void *)
void (*)(_object *, void *)
但是当我尝试寻找规范类型或其名称时
script print lldb.target.FindTypes("void (*)(struct _object *, void *)").GetSize()
我得到 0 个结果。我还尝试了上面的变体与不同的空白,没有struct
关键字等没有任何结果。
我能找到的最好的办法是迭代所有模块类型并比较名称,所以这样的东西实际上可以工作,但非常慢:
target.GetModuleAtIndex(i).GetTypes().GetTypeAtIndex(j).GetName() == "void (*)(_object *, void *)"
我是否做错了什么,或者是一个错误,或者不支持?