Även om det här funktionsnamnet verkligen är ganska långt finns det inget enkelt sätt att förenkla det och det är inte heller för svårt att förstå när du förstår anständig C ++ - utvecklingserfarenhet, speciellt med std. TLDR-svaret är att det här är en konstruktör för ett std :: string
-objekt (specifikt ser det ut som substring (3) -konstruktören, men Jag är inte 100% säker).
Om du besöker std :: string
referenssidan ser du att detta är definitionen för std::string
:
typedef std :: basic_string<char> string;
Klassen std :: string
definieras med hjälp av std :: basic_string
klassmallen, som har tre mallparametrar:
- teckentypen som används för strängobjektet.
- ett objekt för att styra vissa strängegenskaper.
- Tilldelaren som används för att faktiskt fördela strängbuffertarna för klassen.
I fallet std :: string
tillhandahålls dock endast den första mallparametern - de andra två är standarddefinierade baserat på första mallparametern (char), och även om de kan ersättas med olika eller mer komplexa egenskaper eller allokatorer, är detta inte fallet för klassen std :: string
.
Även om typedef-strängen är ganska enkel och okomplicerad tack vare att standardmallparametrarna är ospecificerade, används hela definitionen när objektet byggs och faktiskt definieras av kompilatorn, vilket lägger till många definitioner av pannplattor.
Om vi delar upp det till dess delar ser vi att std :: basic_string
används och tre mallparametrar anges. Som nämnts för std :: string
, härleds den andra ( std :: char_traits<char>
) och tredje ( std :: allocator<char>
) av först och är båda mallarna själva och får samma mallparameter std :: basic_string
got ( char
).
Efter klassdefinitionen är de två kolon anger en definition av ett objekt under klassnamnutrymmet:
:: basic_string<char, std :: char_traits<char>, std :: allocator<char>> (void * Dst3, _Y >
Vi kan lätt se att detta är en funktion som har samma namn som själva klassen, vilket är det kända sättet att definiera en konstruktör.
Slutligen, som med alla funktioner har vi de parametrar som denna funktion accepterar inom parentes:
void * Dst, _BYTE * a2, __int64 a3
För att förenkla den fullständiga definitionen tillbaka till std :: basic_string<char>
, måste man hålla standardmallparametrarna för alla std-mallklasser och ta bort de som känns igen som standard . Även om detta inte är en mycket svår uppgift, verkar det lite överflödigt för mig. Du uppenbarligen uppmuntras att antingen utveckla ett sådant plugin själv eller föreslå funktionsförbättring till IDA-utvecklingsteamet.