我想通过将'inputCounter'参数压入堆栈来传递参数。在该过程中,我取消了指向该参数的堆栈指针的引用,并希望将其添加到数组的地址,然后将其递增4(数组的大小)。但是,出现了以下错误:
在Project.exe中的0x00403729处引发异常:0xC0000005:访问冲突写入位置0x0080C0ED。
我正在使用Visual Studio和irvine32.inc库。
我已经尝试调试ebx(我保存了inputCounter的寄存器),并且在第一次运行中,我希望将其设置为0,然后在第二次运行中,我希望将其设置为4。但是,它从0开始(这是在我的主目录中定义的),但由于某种原因,它随后跳到了“ 0040607B”。并在以下行出现错误:
mov [esi],eax。
我们将不胜感激!
include Irvine32.inc
.data
array dword 2 DUP (?)
inputCounter dword 0
.code
main proc
mov esi, offset array
mov ecx, lengthof array + 1
mov ebx, 0
loopMain:
push offset inputCounter ;push the address of inputCounter onto the stack
call input
push offset inputCounter ;push the address of inputCounter onto the stack
call input
loop loopMain
exit
main endp
input proc
pushad ;save all registers
mov ebx, [esp + 36] ;store inputCounter into ebx
mov edx, offset prompt ;address of the prompt
call writeString
call readInt
add esi, ebx ;add 'inputCounter' to address of array
mov [esi], eax ;*error occurs here*
add dword ptr[ebx], 4 ;increment 'inputCounter' by 4 (size of array)
popad ;restore all registers
ret
input endp
end main