(char *)__ strdup在c中做什么

时间:2018-09-09 17:23:33

标签: c decompiling ida

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);的实际用途吗?

2 个答案:

答案 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 }}已被强制转换。

无论如何,它用于复制字符串。