2010-12-17 27 views
34

czy istnieje jakikolwiek koder-mangowanie C++ dla g ++?C++ nazwa mangling dekoder dla g ++?

+0

inny g ++? :) – ruslik

+15

Niektórzy ludzie wkrótce odpowiedzą 'C++ filt' –

+0

Głosowanie, aby ponownie otworzyć: http://stackoverflow.com/questions/4465872/why-does-typeid-name-return-weird-characters-using-gcc-and -how-to-make-it-prin wyraźnie wymaga, aby był wewnątrz kodu i tylko dla typów, które nigdy nie pojawiają się w plikach obiektów (w przeciwieństwie do funkcji). Ten jest zwykle interpretowany jako "na plikach obiektowych z linii poleceń". –

Odpowiedz

48

Można używać C++ FiLt do demangle C++ symboli. Na przykład

$ c++filt -n _Z1fv 
f() 
2

Możesz być także zainteresowany opcję -C z objdump:

objdump -CSr main.o 

który demangles referencje relokacji jak:

char *sn = new char[4]; 
10: bf 04 00 00 00   mov $0x4,%edi 
15: e8 00 00 00 00   callq 1a <main+0x1a> 
         16: R_X86_64_PC32  operator new[](unsigned long)-0x4 

Bez -C byłoby pokazać zniekształconej nazwy _Znam .

Zobacz także: Can objdump un-mangle names of C++ template functions?

Istnieją również pewne demanglers internetowych wymienionych w Is there an online name demangler for C++? jak http://demangler.com/ Jeżeli istnieje, jest SaaS od niego.

nm posiada również opcję -C.

+0

lub nawet 'objdump -CSr main.o | less --pattern = _Znam' –