Подтвердить что ты не робот

Какая разница между KERN_INVALID_ADDRESS и KERN_PROTECTION_FAILURE?

В чем разница между KERN_INVALID_ADDRESS и KERN_PROTECTION_FAILURE на iPhone OS?

У меня есть два отчета о сбоях от специального бета-тестера, которые находятся на расстоянии 5 минут, и основное различие между ними (кроме раздела "Двоичные изображения:" ) - это раздел:

Отчет A:

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000008

Отчет B:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x67696c69

Для чего это стоит, у обоих есть такая трассировка:

Thread 0 Crashed:
0   libobjc.A.dylib                 0x30011940 objc_msgSend + 20
1   UIKit                           0x30940174 -[UIWindow _shouldAutorotateToInterfaceOrientation:] + 60
2   UIKit                           0x30a223d8 -[UIWindow _updateToInterfaceOrientation:duration:force:] + 36
3   UIKit                           0x30958638 -[UIWindow _updateInterfaceOrientationFromDeviceOrientation] + 112
4   UIKit                           0x30942514 -[UIWindow _handleDeviceOrientationChange:] + 72
5   Foundation                      0x3054dc7a _nsnote_callback + 178
6   CoreFoundation                  0x3024ea52 _CFXNotificationPostNotification + 298
7   Foundation                      0x3054b854 -[NSNotificationCenter postNotificationName:object:userInfo:] + 64
8   UIKit                           0x309414a4 -[UIDevice setOrientation:] + 124
9   UIKit                           0x30938330 -[UIApplication handleEvent:withNewEvent:] + 5232
10  UIKit                           0x30936ce8 -[UIApplication sendEvent:] + 60
11  UIKit                           0x30936874 _UIApplicationHandleEvent + 4336
12  GraphicsServices                0x32046964 PurpleEventCallback + 1028
13  CoreFoundation                  0x30254a70 CFRunLoopRunSpecific + 2296
14  CoreFoundation                  0x30254164 CFRunLoopRunInMode + 44
15  GraphicsServices                0x3204529c GSEventRunModal + 188
16  UIKit                           0x308f0374 -[UIApplication _run] + 552
17  UIKit                           0x308eea8c UIApplicationMain + 960
18  MyApp                           0x00015e24 0x1000 + 85540
19  MyApp                           0x0000f138 0x1000 + 57656

Кроме того, я не реализую метод "shouldAutorotateToInterfaceOrientation:" в любом месте моего кода.

4b9b3361

Ответ 1

EXC_BAD_ACCESS (SIGBUS) KERN_PROTECTION_FAILURE означает, что виртуальный адрес явно ошибочен: большинство процессоров должны иметь доступ к памяти на определенной границе байта. Поскольку ваш доступ к данным здесь выровнен для 64-битного значения (8), он должен попытаться выполнить команду, которая извлекает 128-битное значение (например, команду сравнения и обмена CMPXCHG16B). В любом случае вы можете увидеть из примера здесь, что это 0x00000008, что, вероятно, означает, что вы обращаетесь к элементу структуры, который смещает 8 байтов с начала, но ваш указатель структуры NULL.

EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS означает, что виртуальный адрес, на который вы ссылаетесь, не находится в таблицах страниц или у вас нет доступа. Это виртуальный адрес, к которому вам не разрешен доступ. Для вашего адреса адреса адреса 0x67696c69 вероятно, что это то, что не является указателем, который обрабатывался как указатель; или ваша структура данных, содержащая указатель, была свободна и перезаписана другими данными.

Для вашего примера KERN_INVALID_ADDRESS данные указателя указывают на ASCII 'ilig' (потому что это немного endian). Поэтому память, в которой был сохранен ваш указатель, скорее всего, была перезаписана какой-то строкой.

В обоих случаях, вероятно, что что-то перезаписало структуры данных в UIWindow.