求助:VC6 编译内嵌汇编不通过。

wenfh2020 wenfh2020 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
错误:error C2443: operand size conflict
求解决,或者转换下面代码,谢谢。


BOOL CSymEngine::GetCurrentThreadContext(PCONTEXT pContext)
{
#if defined _M_IX86
__asm
{
push eax
push edi

push es
push ecx

// EDI = pContext
mov edi, [pContext]
// ES = DS
push ds
pop es
// ECX = sizeof(*pContext)
mov ecx, size CONTEXT
// EAX = 0
xor eax, eax
// store EDI
push edi
// ZeroMemory(pContext, sizeof(*pContext))
cld
rep stosb
// restore EDI
pop edi

pop ecx
pop es

// fill pContext
mov dword ptr [edi] CONTEXT.ContextFlags, CONTEXT_FULL
mov dword ptr [edi] CONTEXT.Eax, eax
mov dword ptr [edi] CONTEXT.Ecx, ecx
mov dword ptr [edi] CONTEXT.Edx, edx
mov dword ptr [edi] CONTEXT.Ebx, ebx
mov dword ptr [edi] CONTEXT.Esi, esi
mov dword ptr [edi] CONTEXT.Edi, edi
mov word ptr [edi] CONTEXT.SegSs, ss
mov word ptr [edi] CONTEXT.SegCs, cs
mov word ptr [edi] CONTEXT.SegDs, ds
mov word ptr [edi] CONTEXT.SegEs, es
mov word ptr [edi] CONTEXT.SegFs, fs
mov word ptr [edi] CONTEXT.SegGs, gs
// pContext->EFlags = flags
pushfd
pop [edi] CONTEXT.EFlags
// extract caller's EBP, EIP (return address) and ESP
mov eax, [ebp]
mov dword ptr [edi] CONTEXT.Ebp, eax
mov eax, [ebp + 4]
mov dword ptr [edi] CONTEXT.Eip, eax
lea eax, [ebp + 8]
mov dword ptr [edi] CONTEXT.Esp, eax

pop edi
pop eax
}
#elif defined _M_X64
RtlCaptureContext(pContext);
#else
#error CPU architecture is not supported.
#endif
return TRUE;
}
...全文

相关推荐

评论 14
收藏 已收藏
分享
返回顶部
wenfh2020
C++ 语言 65,214 成员 250,514 内容