我试着这样做:
destination = thread.GetFrameAtIndex(0).GetSymbol().GetName()
# registers = thread.GetFrameAtIndex(0).GetRegisters()
for x,i in enumerate(thread.GetFrameAtIndex(0).get_arguments()):
log("arg: {0}: sum: {1} val: {2}".format(x,
i.GetSummary(),
i.GetValue()))
for x, i in enumerate(thread.GetFrameAtIndex(0).GetRegisters()):
log("reg: {0}: sum: {1} val: {2} desc: ".format(
x,
i.GetSummary(),
i.GetValue(),
i.GetObjectDescription()))
其思想是获取指针的所有类型、值和内容(当lldb可以解析它们时) 例如,对于char*、string、NSString等,除了GetSummary()/GetObjectDescription()能够将它们解析为实际的字符串之外,其他都是I
问题是,当我尝试跟踪thread.GetFrameAtIndex(0).get_arguments()
时,总是返回空列表, thread.GetFrameAtIndex(0).GetRegisters()
的输出如下所示:
reg: 0: sum: None val: None desc:
reg: 1: sum: None val: None desc:
reg: 2: sum: None val: None desc:
我打电话干什么
我的目的是将其添加到调用我在lldb中构建的跟踪程序中,因此在每个函数中,跟踪程序将尽最大努力解析函数参数值,在退出时,跟踪程序将尽最大努力解析函数返回值
当您调用GetRegisters时,返回的是一个寄存器组数组、GPR、浮点以及您的机器可能拥有的任何其他内容。寄存器组没有值或摘要-尽管有名称。例如,在intel上,我(在脚本解释器中)得到:
因此,您需要再进行一次迭代,或者如果您只想获得GPR的,则它们始终是第一位的,因此:
相关问题 更多 >
编程相关推荐