用于修改 C++ 符号名称的 Linux 实用程序是什么?

2023-12-26

I have c++filt命令来破坏符号,什么工具可以做相反的事情并破坏符号名称?

如果我想打电话的话这会很有用dlsym()位于损坏的 C++ 函数名称上。我不想对代码中的名称修改进行硬编码,因为由于使用新的编译器版本或新的编译器品牌,或者目前由于针对多个平台进行编译,它可能会随着时间的推移而发生变化。

是否有一种编程方法可以在运行时获取表示 C++ 函数的字符串,以便代码独立于编译器?可能实现此目的的一种方法是在编译时调用一个实用程序,该实用程序为正在使用的编译器执行名称重整,并将适当的重整 C++ 符号名称插入到字符串中dlsym() to use.

这是我在该网站上找到的最接近的解决方案 https://stackoverflow.com/q/1067346/115751这是通过使用固定的 C 样式名称来间接指向您希望的库中定义的 C++ 符号来完成的dlsym(),但是如果您无法控制该库提供的内容,则这不是一个选项。


这就是 g++ 处理名字的方式。您可以在您的程序上实现这些修改规则。

另一个(疯狂的)解决方案是列出您想要使用的库中的所有符号(如果您了解格式,这并不难),将它们全部分解,然后在该列表中搜索您的函数名称。这种方法的优点是分解更容易,因为有一个函数调用可以做到这一点:abi::__cxa_demangle,来自 cxxabi.h 标头。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于修改 C++ 符号名称的 Linux 实用程序是什么? 的相关文章

随机推荐