USBを介していくつかの外部デバイスと通信するためのObjective-Cライブラリを作成しています。特定のメソッドを呼び出すと、メソッド内または一部のCシステム関数(mallocまたはpthreadに関連)内のランダムな場所でクラッシュし、「解放されたオブジェクトのチェックサムが無効です」、「プールの自動解放ページ0x1102032が破損しています」、または、不明なセレクターエラー(セレクターは存在します)。
Guard Malloc機能を使用すると、EXEC_BAD_ACCESSエラーでこの行で停止します。
- (void)theMethod {
// some code
NSMutableData *payloads_pool = [NSMutableData dataWithLength:0x800];
NSUInteger payloads_pool_length = [payloads_pool length];
void *buffer = [payloads_pool mutableBytes];
memset(buffer, 0xCC, payloads_pool_length);
for (i = 0; i < 0x800; i += 0x40) {
unsigned int *buf = [payloads_pool mutableBytes];
(buf+i)[0] = 0x405; <==== STOP ON THIS LINE
(buf+i)[1] = 0x101;
(buf+i)[2] = 0x8402B001;
(buf+i)[3] = 0x8402EB01;
}
// some code
}