gpt4 book ai didi

c++ - 'ret' 指令访问冲突

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:00 27 4
gpt4 key购买 nike

我有这个函数,它主要由内联汇编码成。

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
}
}

在运行时,返回指令出现访问冲突。

我使用的是 VC++ 6,它有时可能意味着指向上面的行,所以在 'pop esp' 上是可能的。如果你能帮助我,那就太好了。谢谢,iDomo。

最佳答案

您未能正确管理堆栈指针。特别是,您对 malloc 的调用使堆栈不平衡,并且您的 pop esp 最终将错误的值弹出到 esp 中。因此,当您尝试从无效堆栈(CPU 无法读取返回地址)ret 时,就会发生访问冲突。目前还不清楚你为什么要插入和弹出 esp;什么都没做。

关于c++ - 'ret' 指令访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14106374/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com