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