Access violation reading location 0x00000004.


最近在写x86汇编出现了这个问题,折腾了好久,不过最后完美解决了。

原因出在下面这段代码

.MODEL FLAT, C

.CODE
testcommon PROC

     push ebp
     mov ebp, esp

     mov eax, [ebp+8]    ;基址
     mov esi, [ebp+12]    ;长度

     mov ecx, 0            ;    循环变量
begin:
     cmp ecx,  esi
     je done
     mov dword ptr [eax+ecx*4], 4
     add ecx, 1
     jmp begin

done:
    mov esp, ebp
    pop ebp
    ret

testcommon ENDP
END

在返回到main函数中时总是出现错误信息

 Access violation reading location 0x00000004.

  经过一步步的定位,以及查找资料,发现程序没有遵守被调用着规范。

 

 

也就是说被调用程序负责保护EBX, EDX, ESI寄存器,而在上面那段程序中,直接使用ESI寄存器而没有加以保护,因此,在返回到调用函数后,程序行为会出错。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM