断点+内存映射终章(CLR问题)
原文中文,约6100字,阅读约需15分钟。
📝
内容提要
本文介绍了微软技术栈中的DOTNET_EnableWriteXorExecute环境变量,通过内存映射提高安全性和调试托管代码的方法。文章还解答了一些疑问,并指出需要解决断点+内存映射的问题。
🎯
关键要点
-
DOTNET_EnableWriteXorExecute环境变量在微软技术栈中用于内存映射,提高安全性和调试托管代码。
-
该环境变量的默认值为1,开启内存映射,导致在内存映射范围内无法设置断点。
-
设置DOTNET_EnableWriteXorExecute为0可以通过普通赋值方式调试托管代码,避免断点异常。
-
官方建议使用内存映射的方法,.Net7之后默认开启该功能。
-
通过lldb验证DOTNET_EnableWriteXorExecute的值对断点的影响,值为1时无法断点,值为0时可以正常断点。
-
ExecutableAllocator::IsWXORXEnabled函数判断环境变量的值,决定是否使用内存映射。
-
hostfxr宿主的g_isWXorXEnabled默认值为0,导致无法感知内存映射+断点的异常。
-
文章指出需要解决断点与内存映射的问题,并更正前两篇文章中的错误观点。
🏷️