在二进制文件中查找 C++ STL 函数

逆向工程 艾达 二元分析 C++ 手臂 操作系统
2021-06-26 21:53:15

我有一个二进制文件(实际上,一个 ARM 嵌入式设备的操作系统,它还包含一些高级应用程序(在用户界面中硬编码))。

我知道操作系统的某些部分来自 C++ 代码,因此二进制文件很可能包含 C++ STL。

但是,我对 STL 了解不多。

你有找到STL函数地址的方法吗?(搜索“地图”、“向量”、...字符串的基本方法不成功,我不知道在这种情况下可以搜索的任何特定功能)

STL 函数是否有某种签名?

谢谢!

附加信息:我使用 IDA。我可以使用 GDB 运行操作系统。我知道许多标准 C 函数(ctype/stddio/...)的地址。

1个回答

像 STL 或 Boost 这样的库很棘手。因为它们非常基于模板,并且它们的大部分代码是在编译时生成的,所以为它们制作 FLIRT 风格的签名非常困难。太多依赖于特定的编译器、构建选项、优化设置等,因此除非您在生成签名时非常匹配它们,否则您不太可能获得很多好的点击。

但是,您可能会发现它们的一些迹象。例如,std::string某些情况下的典型实现会抛出异常length_errorout_of_range. 您或许能够找到对错误文本或异常名称的引用。除此之外,我认为除了从实际代码中识别特定实现之外,您可以寻找的东西不多。

但是,既然你提到它是一个实时操作系统,我非常怀疑它使用的是 STL。在操作系统中,任何非确定性行为都是坏事,使用 STL 基本上可以随时获得异常。他们可能会使用一些有限的 C++ 来更好地封装,但任何高级类都可能是定制的,而不是来自 STL 或 Boost。