MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / DemangleName

Method DemangleName

demangler/msvc/demangle_msvc.cpp:1232–1334  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1230
1231
1232void Demangle::DemangleName(QualifiedName& nameList,
1233 BNNameType& classFunctionType,
1234 BackrefList& nameBackrefList)
1235{
1236 string out;
1237 BNNameType functionType;
1238 BNNameType dummyFunctionType;
1239 vector<FunctionParameter> params;
1240 while(1)
1241 {
1242 m_logger->LogDebug("%s: '%s'\n", __FUNCTION__, reader.GetRaw());
1243 switch (GetNameType())
1244 {
1245 case NameString:
1246 m_logger->LogDebug("Demangle String\n");
1247 DemangleNameTypeString(out);
1248 nameList.insert(nameList.begin(), out);
1249 m_logger->LogDebug("Pushing backref NameString %s", out.c_str());
1250 nameBackrefList.PushStringBackref(out);
1251 m_logger->LogDebug("nameList.front(): %s\n", nameList.front().c_str());
1252 m_logger->LogDebug("%s: '%s'\n", __FUNCTION__, reader.GetRaw());
1253 break;
1254 case NameLookup:
1255 m_logger->LogDebug("Demangle Lookup\n");
1256 DemangleTypeNameLookup(out, functionType);
1257 classFunctionType = functionType;
1258 nameList.insert(nameList.begin(), out);
1259 break;
1260 case NameBackref:
1261 m_logger->LogDebug("Demangle Backref");
1262 out = nameBackrefList.GetStringBackref(reader.Read() - '0');
1263 m_logger->LogDebug("Demangle Backref: %s", out.c_str());
1264 nameList.insert(nameList.begin(), out);
1265 break;
1266 case NameTemplate:
1267 {
1268 m_logger->LogDebug("Demangle Template: '%s'\n", reader.GetRaw());
1269 BackrefList templateBackref;
1270 out = DemangleUnqualifiedSymbolName(nameList, templateBackref, functionType);
1271 m_logger->LogDebug("Pushing backref NameTemplate %s", out.c_str());
1272 templateBackref.PushStringBackref(out);
1273 m_logger->LogDebug("Demangling Template variables %s\n", reader.GetRaw());
1274 DemangleTemplateParams(params, templateBackref, out);
1275 nameList.insert(nameList.begin(), out);
1276 nameBackrefList.PushStringBackref(out);
1277 break;
1278 }
1279 case NameConstructor:
1280 m_logger->LogDebug("NameConstructor\n");
1281 classFunctionType = ConstructorNameType;
1282 DemangleName(nameList, dummyFunctionType, nameBackrefList);
1283 if (nameList.size() == 0)
1284 throw DemangleException();
1285 nameList.push_back(nameList[nameList.size()-1]);
1286 return;
1287 case NameDestructor:
1288 classFunctionType = ConstructorNameType;
1289 m_logger->LogDebug("NameDestructor\n");

Callers

nothing calls this directly

Calls 15

GetNameTypeFunction · 0.85
LogDebugMethod · 0.80
c_strMethod · 0.80
PushStringBackrefMethod · 0.80
GetStringBackrefMethod · 0.80
push_backMethod · 0.80
StringSizeMethod · 0.80
DemangleExceptionClass · 0.70
GetRawMethod · 0.45
insertMethod · 0.45
beginMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected