(char *)__strdup 在 c 中做什么
what does (char *)__strdup do in c
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);
实际上做了什么?
如此处所示:http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/baselib---strdup-1.html
__strdup -- alias for strdup
strdup
的作用可以在这个答案中阅读:
简短的版本是,它创建作为参数传递的字符串的副本和 returns 指向副本的指针。
strdup
returns char *
所以我看不出明确类型转换的意义,除了开头的 ___
部分可能会建议用户strdup
的定义版本已被类型转换。
反正它是用来复制字符串的。
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);
实际上做了什么?
如此处所示:http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/baselib---strdup-1.html
__strdup -- alias for strdup
strdup
的作用可以在这个答案中阅读:
简短的版本是,它创建作为参数传递的字符串的副本和 returns 指向副本的指针。
strdup
returns char *
所以我看不出明确类型转换的意义,除了开头的 ___
部分可能会建议用户strdup
的定义版本已被类型转换。
反正它是用来复制字符串的。