求助:VC6 编译内嵌汇编不通过。
错误: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;
}
...全文
相关推荐
在VC2008下将32位C++内嵌汇编迁移到64位
在 VC2008-x86 下,内嵌汇编可以实现,但是在 VC2008-x64 下,编译器报告 _asm{} 语法错误。查资料,原来 C++ 不支持内嵌的 64 位汇编。
用vc6开发汇编语言程序的方法
完成以上步骤后,便可以通过VC6.0的“编译”功能来构建和运行汇编语言程序。这个过程可能需要一定的耐心和细心,因为网络上的信息可能不准确,所以亲自实践和整理步骤至关重要。
VC6下16位汇编小工具
VC6_ASM可能包含了自定义的批处理脚本或者其他辅助工具,使得在VC6中编写、编译和调试16位汇编代码变得更加便捷。在使用这些工具时,开发者需要注意以下几点:1.
易语言vc6_vc7_vc8_vc9_vc2010到vc2022静态编译12个版本
本篇文章将详细介绍易语言VC静态编译链接器多版本集合,从VC6.0到VC2022,涵盖12个版本的静态编译功能,确保用户能根据需求选择最适合的编译环境。
如何在vc6下编译x264.pdf
#### 知识点二:编译环境搭建在VC6环境下成功编译x264,需完成以下关键步骤:1.


