Поскольку я новичок в реверс-инжиниринге, я не могу понять, почему в предложении 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;
}