function到mangle / demangle函数

我之前已经certificate,C ++函数不易在汇编中表示。 现在我有兴趣阅读这种或那种方式,因为callgrind,valgrind的一部分,显示它们在组装时被解构,它们被显示为损坏,所以我想要破坏valgrind函数输出或者取消函数的汇编名称。 有人试过这样的东西吗? 我正在查看一个网站 ,发现以下内容:

Code to implement demangling is part of the GNU Binutils package; see libiberty/cplus-dem.c and include/demangle.h. 

有人试过这样的东西,我想在C中解码/破坏吗? 我的编译器是gcc 4.x.

使用c++filt命令行工具对名称进行解码。

这是我的C ++ 11实现,源自以下页面: http : //gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html

 #include  // needed for abi::__cxa_demangle std::shared_ptr cppDemangle(const char *abiName) { int status; char *ret = abi::__cxa_demangle(abiName, 0, 0, &status); /* NOTE: must free() the returned char when done with it! */ std::shared_ptr retval; retval.reset( (char *)ret, [](char *mem) { if (mem) free((void*)mem); } ); return retval; } 

为了使返回的(char *)上的内存管理变得容易,我使用std :: shared_ptr和一个自定义lambda’deleter’函数,该函数在返回的内存上调用free()。 因此,我不必担心自己删除内存,我只是根据需要使用它,当shared_ptr超出范围时,内存将被释放。

这是我用来访问demangled类型名称的宏(const char *)。 请注意,您必须打开RTTI才能访问’typeid’

 #define CLASS_NAME(somePointer) ((const char *) cppDemangle(typeid(*somePointer).name()).get() ) 

所以,从C ++类中我可以说:

 printf("I am inside of a %s\n",CLASS_NAME(this));