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

Method DemangleSymbol

demangler/gnu3/demangle_gnu3.cpp:1955–2231  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1953
1954
1955TypeBuilder DemangleGNU3::DemangleSymbol(QualifiedName& varName)
1956{
1957 indent();
1958 MyLogDebug("%s: %s\n", __FUNCTION__, m_reader.GetRaw().c_str());
1959 TypeBuilder returnType;
1960 bool isReturnTypeUnknown = false;
1961 TypeBuilder type;
1962 vector<FunctionParameter> params;
1963 bool cnst = false, vltl = false, rstrct = false;
1964 bool oldTopLevel;
1965 QualifiedName name;
1966
1967 /*
1968 <encoding> ::= <function name> <bare-function-type>
1969 ::= <data name>
1970 ::= <special-name>
1971 */
1972 //<special-name>
1973 switch (m_reader.Peek())
1974 {
1975 case 'G':
1976 m_reader.Consume();
1977 switch (m_reader.Read())
1978 {
1979 case 'A': //TODO hidden alias
1980 LogWarn("Unsupported demangle type: hidden alias\n");
1981 throw DemangleException();
1982 case 'R': //TODO reference temporaries
1983 LogWarn("Unsupported demangle type: reference temporary\n");
1984 throw DemangleException();
1985 case 'T': //TODO transaction clones
1986 LogWarn("Unsupported demangle type: transaction clone\n");
1987 throw DemangleException();
1988 case 'V':
1989 {
1990 TypeBuilder t = DemangleSymbol(name);
1991 varName.push_back("guard_variable_for_" + t.GetTypeAndName(name));
1992 type = TypeBuilder::IntegerType(1, false);
1993 if (m_reader.Length() == 0)
1994 return type;
1995 //function parameters
1996 string paramList;
1997 paramList += "(";
1998 bool first = true;
1999 do
2000 {
2001 if (m_reader.Peek() == 'v')
2002 {
2003 m_reader.Consume();
2004 break;
2005 }
2006 if (!first)
2007 paramList += ", ";
2008 paramList += DemangleTypeString();
2009 }while (m_reader.Peek() != 'E');
2010 m_reader.Consume();
2011 varName.back() += paramList + ")";
2012 varName.push_back(DemangleSourceName());

Callers 1

DemangleStringGNU3Method · 0.45

Calls 15

MyLogDebugFunction · 0.85
IntegerTypeClass · 0.85
ArrayTypeClass · 0.85
CreateUnknownTypeFunction · 0.85
VoidTypeClass · 0.85
c_strMethod · 0.80
push_backMethod · 0.80
GetTypeAndNameMethod · 0.80
GetStringAfterNameMethod · 0.80
IsConstMethod · 0.80
IsVolatileMethod · 0.80
GetPointerSuffixMethod · 0.80

Tested by

no test coverage detected