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

Method DemangleLocalName

demangler/gnu3/demangle_gnu3.cpp:1817–1870  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1815
1816
1817TypeBuilder DemangleGNU3::DemangleLocalName()
1818{
1819 indent();
1820 MyLogDebug("%s '%s'\n", __FUNCTION__, m_reader.GetRaw().c_str());
1821 TypeBuilder type;
1822 QualifiedName varName;
1823 bool oldTopLevel = m_topLevel;
1824 m_topLevel = false;
1825 type = DemangleSymbol(varName);
1826 m_topLevel = oldTopLevel;
1827
1828 if (varName.size() > 0)
1829 varName.back() += (type.GetStringAfterName());
1830 else
1831 varName.push_back(type.GetString());
1832
1833 if (m_reader.Peek() != 's')
1834 {
1835 //<entity name>
1836 TypeBuilder tmpType = DemangleName();
1837 type = TypeBuilder::NamedType(NamedTypeReference::GenerateAutoDemangledTypeReference(UnknownNamedTypeClass, varName));
1838 QualifiedName newName = type.GetTypeName() + tmpType.GetTypeName();
1839 if (newName.StringSize() > MAX_DEMANGLE_LENGTH)
1840 throw DemangleException("Detected adversarial mangled string");
1841 type.SetTypeName(newName);
1842 type.SetConst(tmpType.IsConst());
1843 type.SetVolatile(tmpType.IsVolatile());
1844 type.SetPointerSuffix(tmpType.GetPointerSuffix());
1845 }
1846 else
1847 {
1848 m_reader.Consume();
1849 type = TypeBuilder::NamedType(NamedTypeReference::GenerateAutoDemangledTypeReference(UnknownNamedTypeClass, varName));
1850 }
1851 // [<discriminator>]
1852 //TODO: What do we do with discriminators?
1853 if (m_reader.Peek() == '_')
1854 {
1855 m_reader.Consume();
1856 if (m_reader.Peek() == '_')
1857 {
1858 m_reader.Consume();
1859 DemangleNumberAsString();
1860 if (m_reader.Read() != '_')
1861 throw DemangleException();
1862 }
1863 else
1864 {
1865 DemangleNumberAsString();
1866 }
1867 }
1868 dedent();
1869 return type;
1870}
1871
1872
1873TypeBuilder DemangleGNU3::DemangleName()

Callers

nothing calls this directly

Calls 15

MyLogDebugFunction · 0.85
c_strMethod · 0.80
GetStringAfterNameMethod · 0.80
push_backMethod · 0.80
StringSizeMethod · 0.80
IsConstMethod · 0.80
IsVolatileMethod · 0.80
GetPointerSuffixMethod · 0.80
DemangleExceptionClass · 0.70
GetRawMethod · 0.45
sizeMethod · 0.45
GetStringMethod · 0.45

Tested by

no test coverage detected