Macos 理解读取指向内存映射文件的内核内存错误地址的崩溃

Macos 理解读取指向内存映射文件的内核内存错误地址的崩溃,macos,debugging,crash,mmap,lmdb,Macos,Debugging,Crash,Mmap,Lmdb,我试图弄清楚,如果地址位于内存边界内,从mmamap文件读取如何触发KERN_MEMORY_错误 下面是一个这样的崩溃的例子,尝试读取lmdb格式的文件(可能已损坏)。可以清楚地看到,无效地址位于映射文件区域内,该区域是lmdb映射文件 因此,任何访问映射范围内地址的尝试都可能直接从内存检索页面内容,或者触发页面错误陷阱,最终导致从磁盘读取丢失的数据并将其返回到进程 引起一些担忧的一件事是,文件大小只有24k,映射跨度超过256M。然而,文件的元数据似乎与文件内容一致 Exception Typ

我试图弄清楚,如果地址位于内存边界内,从mmamap文件读取如何触发KERN_MEMORY_错误

下面是一个这样的崩溃的例子,尝试读取lmdb格式的文件(可能已损坏)。可以清楚地看到,无效地址位于
映射文件
区域内,该区域是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