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);
的实际用途吗?
答案 0 :(得分:1)
可以在这里阅读: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
简短的版本是,它创建作为参数传递的字符串的副本,并返回指向该副本的指针。
答案 1 :(得分:0)
strdup
返回char *
,所以我看不到明确进行类型转换的意义,除了开头的___
部分可能会建议用户定义的{{1 }}已被强制转换。
无论如何,它用于复制字符串。