LLDB:在目标创建后执行python回调以注入符号

问题描述 投票:0回答:1

我正在尝试在target create之后执行python函数,所以我可以遍历目标的所有模块,从互联网上下载丢失的符号(基于GetUUIDString),然后覆盖GetSymbolFileSpec()目录和我下载的路径。

不幸的是,我无法弄清楚如何在正确的时间实际调用函数,以便程序尚未执行,创建目标并填充lldb.target.modules并允许我修改符号。

是否有一些关于如何挂钩的文档?我知道有一种理论方法可以通过shell脚本按需获取符号,但这只能在macos而不是其他平台上实现。

lldb
1个回答
0
投票

您可能不希望在target create上执行此操作,因为无法保证目标将在实际运行之前知道将加载到其中的所有库。此外,您可能还希望处理在程序运行时动态加载的库。这样做的真正地方是在Module add(这是Debugsymbols的钩子在lldb中发生的地方)。

看起来Linux和Windows没有调用某个代理来引入调试符号的概念。他们确实在/usr/local/debug中查找预先缓存的符号,但是没有像dsymForUUID这样的调用机制。

如果你想要一点点黑客攻击,那么添加这样的标注会非常简单。只需进行一个以程序名称命名的设置。该程序将输入UUID作为输入,并作为输出返回调试信息的文件名。然后你可以让lldb在lldb当前调用LocateMacOSXFilesUsingDebugSymbols(在LocateSymbols.cpp中)的同一个地方运行它。

也许更简单的方法是添加一个target stop-hook,它调用你编写的一些基于python的命令,查看模块列表并获取已显示的任何新库的调试信息。如果要将其用于调试正在运行的程序,则只关注在控制返回给用户之前添加符号。所以一个停止钩子将是一个适当的地方来做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.