由于标识符未知,LLDB 无法计算函数

lldb cannot evaluate function because of unknown identifier

本文关键字:计算 函数 LLDB 标识符 未知      更新时间:2023-10-16

我有一个优化的二进制文件,它具有 c++ 结构和类,我能够导出类函数的符号并为类函数设置断点,但是,我似乎无法做这样的基本事情:expr ((ns::SomeClass*)$r0)->toString()LLDB 报告 NS 的未知标识符。

从一些谷歌搜索中,我发现了一些关于 expr 前缀文件的内容,并尝试编写一个描述命名空间的标头,但我仍然收到相同的错误。也许我做错了,或者 lldb 的另一个功能可以允许这样做?

我的前缀文件非常简单,我只是想看看我是否可以越过未知标识符位并进入应用于 SomeClass 的错误。

prefix.mm

namespace ns { }

对于这种事情,使用损坏的名称并直接传递"this"指针来调用它可能更容易,即:

(lldb) expr (const char *) _ZN2ns9SomeClass8toStringEv($r0)

否则,您必须在前缀文件中放置该类及其方法的挖空版本,即:

 > cat prefix.h 
   namespace ns
   {
       class SomeClass
       {
       public:
           const char *toString();
       };
   }

这将允许您执行以下操作:

(lldb) expr ((ns::SomeClass *)$rdi)->toString()