int __cdecl sub_920(char *s1) { void *v1; // esi char *ptr; // esi int v3; // edi v1 = off_2048; strlen((const char *)off_2048); ptr = (char *)__strdup(v1); memfrob(ptr); v3 = strcmp(s1, ptr); free(ptr); return v3; }
Этот код был написан IDA, и я не уверен, что на самом деле делает ptr = (char *)__strdup(v1);
ptr = (char *)__strdup(v1);
strdup возвращает char *, поэтому я не вижу смысла в явном приведении типов, кроме того, что часть ___ в начале может предлагать пользовательскую версию strdup, которая была преобразована в тип.
strdup
char *
___
В любом случае используется для дублирования строки.
Как можно прочитать здесь: http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/baselib---strdup-1.html
__ strdup - псевдоним для strdup
Что strdup можно прочитать в этом ответе: https://stackoverflow.com/a/252802/6699433
Краткая версия: она создает копию строки, переданной в качестве аргумента, и возвращает указатель на копию.