Bee*_*ope 6 windows x86 x86-64 nasm seh
64位Windows ABI定义了一种通用的异常处理机制,我认为这种机制在C++异常和结构化异常之间共享,即使在其他语言如C语言中也是如此.
如果我正在编写一个x86-64汇编例程来编译nasm并链接到C或C++库中,那么在生成展开信息等方面我需要在Windows上做些什么?
我不打算直接在汇编代码中生成任何异常,但我认为如果用户提供的缓冲区无效,代码可能会获得访问冲突等.
我希望尽可能少地编写这个以使其工作,特别是因为它似乎nasm对生成展开信息的支持很差,并且使用MASM不是这个跨平台项目的选项.我确实需要使用(因此保存和恢复)非易失性寄存器.
作为一般规则,Windows x64要求所有功能都提供展开信息.唯一的例外是叶函数,它rsp不修改任何非易失性寄存器,也不修改任何非易失性寄存器.