Macos 理解读取指向内存映射文件的内核内存错误地址的崩溃
我试图弄清楚,如果地址位于内存边界内,从mmamap文件读取如何触发KERN_MEMORY_错误 下面是一个这样的崩溃的例子,尝试读取lmdb格式的文件(可能已损坏)。可以清楚地看到,无效地址位于Macos 理解读取指向内存映射文件的内核内存错误地址的崩溃,macos,debugging,crash,mmap,lmdb,Macos,Debugging,Crash,Mmap,Lmdb,我试图弄清楚,如果地址位于内存边界内,从mmamap文件读取如何触发KERN_MEMORY_错误 下面是一个这样的崩溃的例子,尝试读取lmdb格式的文件(可能已损坏)。可以清楚地看到,无效地址位于映射文件区域内,该区域是lmdb映射文件 因此,任何访问映射范围内地址的尝试都可能直接从内存检索页面内容,或者触发页面错误陷阱,最终导致从磁盘读取丢失的数据并将其返回到进程 引起一些担忧的一件事是,文件大小只有24k,映射跨度超过256M。然而,文件的元数据似乎与文件内容一致 Exception Typ
映射文件
区域内,该区域是lmdb映射文件
因此,任何访问映射范围内地址的尝试都可能直接从内存检索页面内容,或者触发页面错误陷阱,最终导致从磁盘读取丢失的数据并将其返回到进程
引起一些担忧的一件事是,文件大小只有24k,映射跨度超过256M。然而,文件的元数据似乎与文件内容一致
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_MEMORY_ERROR at 0x000000010648800a
Exception Note: EXC_CORPSE_NOTIFY
Termination Signal: Bus error: 10
Termination Reason: Namespace SIGNAL, Code 0xa
Terminating Process: exc handler [0]
VM Regions Near 0x10648800a:
__LINKEDIT 0000000106464000-000000010647f000 [ 108K] r--/rwx SM=COW ^Z^C [/usr/lib/dyld]
--> mapped file 000000010647f000-000000011647f000 [256.0M] r--/rwx SM=PRV Object_id=9034edd9
STACK GUARD 000070000f2b3000-000070000f2b4000 [ 4K] ---/rwx SM=NUL stack guard for thread 1
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 myprog 0x0000000101666756 mdb_page_search_root + 39
1 myprog 0x00000001016660f7 mdb_page_search + 182
2 myprog 0x00000001016614de mdb_cursor_set + 88
3 myprog 0x0000000101661476 mdb_get + 134