diff options
Diffstat (limited to 'src/format/mangling/demangler.c')
-rw-r--r-- | src/format/mangling/demangler.c | 50 |
1 files changed, 47 insertions, 3 deletions
diff --git a/src/format/mangling/demangler.c b/src/format/mangling/demangler.c index dec4cb5..786005d 100644 --- a/src/format/mangling/demangler.c +++ b/src/format/mangling/demangler.c @@ -95,8 +95,18 @@ GBinRoutine *try_to_demangle_routine(const char *desc) GBinRoutine *result; /* Construction à remonter */ DemanglerType i; /* Boucle de parcours */ + static int counter = 0; + result = NULL; + if (strcmp(desc, "_ZN21IUDFSettingsValidator15IdNotIllegalStdEN13UDFParameters12UDF_STANDARDES1_") == 0 + || strcmp(desc, "_ZSt12partial_sortIN9__gnu_cxx17__normal_iteratorIP28CPR_MAI_ADPTY_SectorSequenceSt6vectorIS2_SaIS2_EEEEEvT_S8_S8_") == 0 + || strcmp(desc, "_ZSt22__merge_without_bufferIN9__gnu_cxx17__normal_iteratorIP15CProfStringListSt6vectorIS2_SaIS2_EEEEiEvT_S8_S8_T0_S9_") == 0 + || strcmp(desc, "_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIP8DRIVE_IDSt6vectorIS2_SaIS2_EEEEiS2_EvT_T0_S9_T1_") == 0 // Intéressant + //|| strcmp(desc, "") == 0 + ) + goto exit; + for (i = 0; i < DGT_COUNT; i++) { if (demanglers[i].can_demangle == NULL) @@ -105,7 +115,7 @@ GBinRoutine *try_to_demangle_routine(const char *desc) if (!demanglers[i].can_demangle(desc)) continue; - printf("++ routine :: %s\n", desc); + printf("++ [%d] routine :: %s\n", ++counter, desc); fflush(NULL); result = demangle_routine(i, desc); @@ -114,14 +124,21 @@ GBinRoutine *try_to_demangle_routine(const char *desc) if (result == NULL) { printf("++failed :: %s\n", desc); - exit(-1); + + if (strcmp(desc, "_ZN21IUDFSettingsValidator15IdNotIllegalStdEN13UDFParameters12UDF_STANDARDES1_") != 0 + && strcmp(desc, "_ZSt12partial_sortIN9__gnu_cxx17__normal_iteratorIP28CPR_MAI_ADPTY_SectorSequenceSt6vectorIS2_SaIS2_EEEEEvT_S8_S8_") != 0 + ) + exit(-1); + } - else printf(" -->> '%s'\n", g_binary_routine_get_name(result)); + else printf(" -->> '%s'\n\n", g_binary_routine_get_name(result)); if (result != NULL) break; } + exit: + if (result == NULL) { result = g_binary_routine_new(); @@ -253,6 +270,8 @@ void test_itanium_demangling(void) } \ while (0) + //goto last; + /** * Tests de : * http://www.codesourcery.com/public/cxx-abi/abi-examples.html#mangling @@ -290,6 +309,31 @@ void test_itanium_demangling(void) //TEST_ITANIUM_MANGLING("", ""); + /** + * Tests de : + * http://www.codesourcery.com/public/cxx-abi/abi.html#mangling + */ + + TEST_ITANIUM_MANGLING("_ZN1N1TIiiE2mfES0_IddE", "??? N::T<int, int>::mf(N::T<double, double>)"); + + /** + * Tests de : + * (nero.so). + */ + + TEST_ITANIUM_MANGLING("_ZNSt6vectorItSaItEE6insertEN9__gnu_cxx17__normal_iteratorIPtS1_EERKt", "??? std::vector<unsigned short, std::allocator<unsigned short>>::insert(__gnu_cxx::__normal_iterator<unsigned short *, std::vector<unsigned short, std::allocator<unsigned short>>>, const unsigned short &)"); + + TEST_ITANIUM_MANGLING("_ZSt26__uninitialized_fill_n_auxIP15CProfStringListiS0_ET_S2_T0_RKT1_12__false_type", "CProfStringList *std::__uninitialized_fill_n_aux<CProfStringList *, int, CProfStringList>(CProfStringList *, int, const CProfStringList &, __false_type)"); + + // TODO TEST_ITANIUM_MANGLING("_ZN21IUDFSettingsValidator15IdNotIllegalStdEN13UDFParameters12UDF_STANDARDES1_", ""); + + TEST_ITANIUM_MANGLING("_ZNSbI26NeroMediumFeatureSpecifierSt11char_traitsIS_ESaIS_EE4_Rep10_M_destroyERKS2_", "??? std::basic_string<NeroMediumFeatureSpecifier, std::char_traits<NeroMediumFeatureSpecifier>, std::allocator<NeroMediumFeatureSpecifier>>::_Rep::_M_destroy(const std::allocator<NeroMediumFeatureSpecifier> &)"); + + last: + + /* 80 */ + TEST_ITANIUM_MANGLING("_ZNSt6vectorIlSaIlEE6insertEN9__gnu_cxx17__normal_iteratorIPlS1_EERKl", "??? std::vector<long, std::allocator<long>>::insert(__gnu_cxx::__normal_iterator<long *, std::vector<long, std::allocator<long>>>, const long &)"); + end_of_test: ; |