LLDB:使用 python api 在函数开始的偏移处设置断点

LLDB: Set breakpoint at offset from function start using python api

我有一个设置简单的 lldb python 模块:

def __lldb_init_module (debugger, dict):
    target = debugger.GetSelectedTarget()
    target.DeleteAllBreakpoints()
    process = target.GetProcess()

我可以使用以下方法轻松地在函数开始处设置断点:

breakpoint = target.BreakpointCreateByName("functionName", "moduleName")
breakpoint.SetScriptCallbackFunction( "python_module.bp_hit" )

我知道这是有效的,因为我的 bp_hit 函数被正确调用了。

但是,我确实需要将断点设置在距函数名称地址开始的 X 字节处。如果我知道 functionName 的地址,我可以简单地将 X 添加到地址并使用 BreakpointCreateByAddress。

将为我提供 functionName 地址的 python 代码是什么?

使用 SBTarget::FindFunctions 查找与您的函数名称匹配的 SBSymbolContext。 returns 一个 SBSymbolContext 匹配列表(因为可能有多个。)SBSymbolContext::GetStartAddress 将为您提供该符号开头的 SBAddress。然后使用 SBAddress::OffsetAddress 添加您的偏移量。有一个 SBTarget::CreateBreakpointByAddress 但令人讨厌的是它只需要一个 lldb::addr_t 而不是 SBAddress。您可以通过传入目标的 SBAddress::GetLoadAddress() 从 SBAddress 获得 lldb::addr_t。

吉姆答案的替代方法是使用 SBTarget 的 FindSymbols 函数。