почему objc_retain имеет два параметра в дизассемблированном псевдокоде IDA? - PullRequest
0 голосов
/ 22 октября 2018

Поскольку я новичок в реверс-инжиниринге, я не могу понять, почему в предложении v8 = objc_retain(a3, a2); функция objc_retain() имеет два параметра и даже возвращаемое значение!Насколько я знаю, функция objc_retain в библиотеке времени выполнения просто получает один параметр и никакого возвращаемого значения.как это objc_retain работает с двумя параметрами?

char __cdecl -[NSString writeToAppFile:tag:userInfo:error:](NSString *self, SEL a2, id a3, id a4, id a5, id *a6)
{
  NSString *v6; // r10
  id v7; // r5
  int v8; // r8
  int v9; // r1
  int v10; // r11
  int v11; // r1
  int v12; // r6
  void *v13; // r0
  void *v14; // r4

  v6 = self;
  v7 = a4;
  v8 = objc_retain(a3, a2);
  v10 = objc_retain(v7, v9);
  v12 = objc_retain(a5, v11);
  v13 = objc_msgSend(v6, "dataUsingEncoding:", 4);
  v14 = (void *)objc_retainAutoreleasedReturnValue(v13);
  LOBYTE(v7) = (unsigned int)objc_msgSend(v14, "writeToAppFile:tag:userInfo:error:", v8, v10, v12, a6);
  objc_release(v12);
  objc_release(v10);
  objc_release(v8);
  objc_release(v14);
  return (char)v7;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...