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

时间:2015-08-20 13:52:33

标签: python scripting lldb

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

tempN

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

Jim的回答是使用SBTarget的FindSymbols功能。