我正在尝试按照这篇Microsoft文章调试VBS enclave:https://learn.microsoft.com/en-us/windows/win32/trusted-execution/vbs-enclaves-dev-guide #step-4-debugging-vbs-enclaves:~:text=Step%204%3A%20调试%20VBS%20enclaves
我成功地正确编译并签署了 enclave,并且我能够运行它。问题是,即使按照我链接的文章中的步骤进行操作,我也无法调试在 enclave 中运行的代码。
我采取以下步骤:
".reload -f vbsenclave.dll"
执行这些步骤并继续后,我收到以下错误:
GetContextState failed, 0x80070057
GetContextState failed, 0x80070057
GetContextState failed, 0x80070057
GetContextState failed, 0x80070057
Unable to get program counter
GetContextState failed, 0x80070057
(177c.1d8c): Break instruction exception - code 80000003 (first chance)
GetContextState failed, 0x80070057
GetContextState failed, 0x80070057
GetContextState failed, 0x80070057
GetContextState failed, 0x80070057
Unable to get current machine context, Win32 error 0n87
GetContextState failed, 0x80070057
GetContextState failed, 0x80070057
Unable to get program counter
No flat address for current instruction
?? ???
GetContextState failed, 0x80070057
Unable to get current machine context, Win32 error 0n87
GetContextState failed, 0x80070057
Unable to get current machine context, Win32 error 0n87
GetContextState failed, 0x80070057
Unable to get current machine context, Win32 error 0n87
GetContextState failed, 0x80070057
GetContextState failed, 0x80070057
GetContextState failed, 0x80070057
我正在使用的 enclave 和主机应用程序的代码来自 Microsoft 的示例 enclave:https://github.com/microsoft/Windows-classic-samples/tree/main/Samples/VbsEnclave
飞地是使用可调试标志创建的:
const IMAGE_ENCLAVE_CONFIG __enclave_config = {
sizeof(IMAGE_ENCLAVE_CONFIG),
IMAGE_ENCLAVE_MINIMUM_CONFIG_SIZE,
IMAGE_ENCLAVE_POLICY_DEBUGGABLE, // DO NOT SHIP DEBUGGABLE ENCLAVES TO PRODUCTION
0,
0,
0,
{ 0xFE, 0xFE }, // family id
{ 0x01, 0x01 }, // image id
0, // version
0, // SVN
0x10000000, // size
16, // number of threads
IMAGE_ENCLAVE_FLAG_PRIMARY_IMAGE
};
主机应用程序还使用可调试标志加载飞地:
// Create the enclave
constexpr ENCLAVE_CREATE_INFO_VBS CreateInfo
{
ENCLAVE_VBS_FLAG_DEBUG, // Flags
{ 0x10, 0x20, 0x30, 0x40, 0x41, 0x31, 0x21, 0x11 }, // OwnerID
};
此错误仅在尝试调试 enclave 时发生,无需调试器即可正常工作。
有人遇到过这个问题或者知道可能是什么原因造成的吗? 谢谢!
设法解决这个问题 - 我尝试在 Hyper-V VM 内执行调试,当我切换到 VMWare VM 时,此问题得到解决。