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