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

Method DemanglePrimaryExpression

demangler/gnu3/demangle_gnu3.cpp:744–835  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

742}
743
744string DemangleGNU3::DemanglePrimaryExpression()
745{
746 indent();
747 MyLogDebug("%s: '%s'\n", __FUNCTION__, m_reader.GetRaw().c_str());
748 char elm1 = '\0';
749 string out;
750 QualifiedName tmpList;
751 string valueString;
752 float f; double d; long double ld;
753 bool oldTopLevel;
754 //expr-primary
755 if (m_reader.PeekString(2) == "_Z")
756 {
757 m_reader.Consume(2);
758 oldTopLevel = m_topLevel;
759 m_topLevel = false;
760 TypeBuilder t = DemangleSymbol(tmpList);
761 m_topLevel = oldTopLevel;
762 out += t.GetStringBeforeName();
763 out += tmpList.GetString();
764 out += t.GetStringAfterName();
765 dedent()
766 return out;
767 }
768 switch (m_reader.Read())
769 {
770 case 'b':
771 elm1 = m_reader.Read();
772 if (elm1 == '0')
773 out += "false";
774 else if (elm1 == '1')
775 out += "true";
776 else
777 throw DemangleException();
778 break;
779 case 'd': //double
780 valueString = m_reader.ReadString(8);
781
782 for (size_t i = 0; i < valueString.size(); i+=2)
783 {
784 ((unsigned char*)&d)[i/2] = (HexToDec(valueString[i]) << 16) + HexToDec(valueString[i+1]);
785 }
786 out += to_string(d);
787 break;
788 case 'e': //long double
789 valueString = m_reader.ReadString(10);
790
791 for (size_t i = 0; i < valueString.size(); i+=2)
792 {
793 ((unsigned char*)&ld)[i/2] = (HexToDec(valueString[i]) << 16) + HexToDec(valueString[i+1]);
794 }
795 out += to_string(ld);
796 break;
797 case 'f': //float
798 valueString = m_reader.ReadString(4);
799
800 for (size_t i = 0; i < valueString.size(); i+=2)
801 {

Callers

nothing calls this directly

Calls 14

MyLogDebugFunction · 0.85
HexToDecFunction · 0.85
c_strMethod · 0.80
GetStringBeforeNameMethod · 0.80
GetStringAfterNameMethod · 0.80
UnReadMethod · 0.80
DemangleExceptionClass · 0.70
GetRawMethod · 0.45
PeekStringMethod · 0.45
ConsumeMethod · 0.45
GetStringMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected