2025-01-10 乐帮网
.net
升级之前的一个项目从.NET8到.NET9后发现一个问题,程序总是莫名奇妙的闪退,通过跟踪定位到位置,发现是调用C++ dll中的方法的时候,程序自动退出,VS没有报任何的错误。但是把项目回滚到.NET 8的时候又一切正常,在没有改任何代码的情况下这种情况猜测可能是.NET9的一个Bug,在网上搜索了好多,发现.NET9默认情况下支持 CET,
从 .NET 9 开始,只允许加载到 .NET 进程的共享库使用 SetThreadContext、RtlRestoreContextNtContinue/ 或其异常处理程序将线程上下文设置为以下位置:
存在于阴影堆栈上。
在异常处理的允许延续地址的表中(由 /EHCONT 编译器选项或 SetProcessDynamicEHContinuationTargets API 生成)。
如果库尝试将线程上下文更改为任何其他位置,则进程将终止。
解决办法:
可以通过添加到 <CETCompat>false</CETCompat> 应用的项目文件(例如 .csproj 文件)来选择退出 CET。
使用Windows 安全应用或组策略选择退出特定 .NET 应用程序的硬件支持的堆栈强制实施。 有关详细信息,请参阅 “启用攻击保护”。
https://learn.microsoft.com/zh-cn/dotnet/core/compatibility/interop/9.0/cet-support
关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com
庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。
如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力