在 Windows 上获取崩溃的模块名和模块内地址偏移
如果应用程序存在多个模块,那么有很大的可能通过 SetUnhandledException()
安装的崩溃处理函数和发生崩溃的地址不在一个模块内,因此直接在 crash handler 里使用当前模块地址是错误的做法。
一个可行的方法是,利用崩溃时的上下文信息 EXCEPTION_POINTERS
,拿到触发崩溃的地址 EIP/RIP,然后利用 Windows 7 新增的 GetMappedFileNameW()
拿到某个地址所在的模块的完整设备路径。