以 $_## 结尾的 C++ 标识符是什么意思?

逆向工程 C++ 安卓 小精灵 共享对象
2021-06-19 04:16:37

在尝试从使用 Cocos2d-x 制作的 Android 游戏中理解 .so 时,我遇到了如下标识符(在 demangling 之后):

SceneActionMap::updateTalkMode(float)::$_37 SceneActionMap::onTouchEndedTalk(cocos2d::Touch*, cocos2d::Event*)::$_38

我对 ELF 和 C++ ABI 仍然有点不放心,但是这些名称可以.rodata.data.rel.ro似乎与 RTTI 相关的某种结构中找到并被某种结构引用

$_37 和 $_38 是什么实体?这些匿名函数是由 NDK 生成的,还是某种关于其他函数的元数据?

1个回答

它是一个 lambda 函数,作为谷歌中的示例堆栈跟踪https://github.com/Microsoft/vscode-cpptools/issues/2117