给定一个在.cpp文件中具有嵌套结构的ARM.elf文件,我可以使用LLDB计算表达式以获得全局结构/数组元素的地址
lldb my_arm.elf
(lldb) ex &user_data.sub_type[2].i[3]
这就得到了预期的结果,
(int *) $1 = 0x200001f0
…类似于gdb,为C/C++结构元素指定了类型、索引和RAM中的地址。LLDB还可以计算像“&;这样的表达式;“主要”、“1+1”等
尝试在lldb API中使用EvaluateExpression()在python中执行相同的操作,总是会导致错误!IsValid()
import lldb # this works in python in linux.
dbg = lldb.SBDebugger().Create()
dbg.SetAsync(False)
modspec = lldb.SBModuleSpec()
modspec.SetFileSpec(lldb.SBFileSpec("my_arm.elf"))
modspec.SetSymbolFileSpec(lldb.SBFileSpec("my_arm.elf"))
target.AddModule(modspec) # target.IsValid() is True.
val=target.EvaluateExpression('&user_data.sub_type[2].i[3]')
这是lldb外部的pythonval.IsValid()
始终为False,我似乎无法从表达式中获取值。更琐碎的表达,如“&;“main”和“1+1”给出了类似的结果
如何使用lldb API计算.elf文件的表达式
如此接近。程序的这种简化提供了所需的结果
结果是:
…这与gdb给出的结果类似,但有更多关于表达式值的信息,并且使用lldb库在过程中快速完成
相关问题 更多 >
编程相关推荐