1. ホーム
  2. iphone

[解決済み] KERN_INVALID_ADDRESSとKERN_PROTECTION_FAILUREの違いは何ですか?

2022-02-08 10:52:40

質問事項

とはどう違うのですか? KERN_INVALID_ADDRESSKERN_PROTECTION_FAILURE をiPhone OSで使用することはできますか?

アドホックベータテスターからの5分間隔のクラッシュレポートが2つありますが、それらの主な違い("Binary Images:"のセクション以外)はこのセクションです。

報告書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:" メソッドを実装していません。

どうすればいいですか?

EXC_BAD_ACCESS (SIGBUS) KERN_PROTECTION_FAILURE は、仮想アドレスが明らかに間違っていることを意味します。ほとんどのCPUは、あるバイトの境界でメモリにアクセスしなければなりません。このデータアクセスは64ビット値(8)にアラインされているので、128ビット値をフェッチする命令(比較・交換命令など)を実行しようとしたのでしょう。 CMPXCHG16B ). いずれにせよ、この例からわかるように 0x00000008 ということは、おそらく先頭から 8 バイトのオフセットがある構造体要素にアクセスしているのですが、構造体ポインタが NULL .

EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS は、参照する仮想アドレスがページテーブルにないか、アクセス権がないことを意味します。アクセスが許可されていない仮想アドレスということです。あなたの例のアドレスの場合 0x67696c69 ポインタではないものがポインタのように扱われたか、そのポインタを含むデータ構造がフリーになって他のデータで上書きされた可能性が高いです。

あなたの KERN_INVALID_ADDRESS の例では、ポインターデータのスペルはASCIIの「ilig」です(リトルエンディアンのため)。したがって、ポインタが格納されていたメモリは、何らかの文字列で上書きされた可能性があります。

どちらのケースも、何かが原因で UIWindow .