You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

80x86汇编程序触发0xC0000005访问违例错误求助

80x86汇编访问冲突错误分析与修复

错误现象

未处理的异常位于Number1.exe中的0x00411B4A处: 0xC0000005: 读取位置0x000AFF01时发生访问冲突。

错误原因及修复方案

  1. 数组地址加载错误
    原代码arrMix过程中,mov esi, array1这类指令是直接读取array1的第一个元素值(0aff01h)存入寄存器,而非数组的内存地址。后续执行mov eax, [esi]时,程序会尝试访问0x000AFF01这个非法内存区域,直接触发访问冲突。

    • 修复:用lea esi, array1或mov esi, OFFSET array1来加载数组的内存地址,而非元素值。
  2. 未初始化的循环计数器
    count变量未赋值,mov ecx, count会把随机垃圾值加载到ecx,导致循环次数失控。实际上主程序已经将ecx设为5,arrMix过程无需重新赋值,直接沿用主程序传入的ecx即可。

    • 修复:删除mov ecx, count这一行,同时可以删掉未使用的count变量定义。
  3. 语法错误
    mov eax, {esi]里的括号用错了,应该是方括号[esi],大括号会导致汇编解析异常,间接引发内存访问问题。

    • 修复:把大括号替换为方括号。

修正后的完整代码

.586
.MODEL FLAT

INCLUDE io.h            ; header file for input/output

.STACK 4096

.DATA
array1 DWORD 0aff01h, 0bff02h, 0cff03h, 0dff04h, 0eff05h
array2 DWORD 002ff0affh, 003ff0bffh, 004ff0cffh, 005ff0dffh, 006ff0effh
array3 DWORD 5 DUP(0)             ; reserve space for 5 DWORDs

.CODE
_MainProc PROC

    mov ecx, 5                          ; 设置循环计数器
    lea esi, array1                 ; 加载array1的地址
    lea edi, array2                 ; 加载array2的地址
    lea ebx, array3                 ; 加载array3的地址
    call arrMix                     ; 调用arrMix过程
    mov eax, 0                      ; 此处可设置断点
    ret                             ; 程序返回
_MainProc ENDP

 arrMix PROC 
    ; 移除错误的计数器和地址赋值,直接使用主程序传入的寄存器值

arrMixLoop:
    mov eax, [esi]                  ; 从array1加载元素
    and eax, 00FF00FFh              ; 保留0-7位和16-23位
    shl eax, 8                      ; 左移8位
    mov edx, [edi]                  ; 从array2加载元素
    and edx, 0FF00FF00h             ; 保留8-15位和24-31位
    shr edx, 8                      ; 右移8位
    or eax, edx                     ; 合并两个位段
    mov [ebx], eax                  ; 将结果存入array3
    add esi, 4                      ; 移动到array1的下一个元素
    add edi, 4                      ; 移动到array2的下一个元素
    add ebx, 4                      ; 移动到array3的下一个元素
    loop arrMixLoop                 ; 循环直到计数器为0

    ret                             ; 过程返回

arrMix ENDP
END                               ; 源代码结束

内容的提问来源于stack exchange,提问作者rabin regmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:45:04