试图将参数传递给过程,但引发异常?

时间:2019-05-22 05:06:39

标签: assembly x86 masm

我想通过将'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

0 个答案:

没有答案