iDo*_*omo 1 c++ assembly inline-assembly access-violation
我有这个功能,主要由内联asm组成.
long *toarrayl(int members, ...){
__asm{
push esp
mov eax, members
imul eax, 4
push eax
call malloc
mov edx, eax
mov edi, eax
xor ecx, ecx
xor esi, esi
loopx:
cmp ecx, members
je done
mov esi, 4
imul esi, ecx
add esi, ebp
mov eax, [esi+0xC]
mov [edi], eax
inc ecx
add edi, 4
jmp loopx
done:
mov eax, edx
pop esp
ret
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,我在返回指令上遇到访问冲突.
我正在使用VC++ 6,它有时可能意味着指向上面的行,所以可能在'pop esp'上.如果你能帮助我,那就太好了.谢谢,iDomo.
您无法正确管理堆栈指针.特别是,你的调用malloc
会使堆栈失去平衡,pop esp
最终会将错误的值弹出esp
.因此,当您尝试ret
从无效堆栈(CPU无法读取返回地址)时,会发生访问冲突.目前还不清楚为什么你在推动和弹出esp
; 没有成就.