为什么objc_retain在IDA反汇编的伪代码中有两个参数?

时间:2018-10-22 06:38:01

标签: ios objective-c reverse-engineering ida

由于我是逆向工程的新手,所以我不明白为什么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;
}

0 个答案:

没有答案