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

调用memcpy函数时触发Access Violation访问违规错误的原因是什么?

错误原因

  • 结构体强转取值异常:你初始化的data数组全为字符'A'(ASCII值为0x41),将其强制转换为phear*类型后,读取到的payload->length实际值为0x41414141(十进制1094795585),远大于data数组的总大小27136,memcpy读取源地址时直接超出data数组边界,触发读取访问违规。
  • 内存分配失败无校验:申请10余GB的内存几乎必然失败,malloc会返回NULL,后续向空指针写入数据也会触发访问违规。

修复方案

  1. 按照结构体内存布局正确初始化data数组,不要直接使用全'A'的字符数组强转使用,示例如下:
// 先定义并初始化合法的phear结构体变量
phear valid_payload = {0};
valid_payload.length = 1024; // 按需设置不超过DATA_SIZE的合理长度
memcpy(valid_payload.payload, "实际待加载的payload内容", valid_payload.length);
// 再将结构体内容拷贝到data数组
memcpy(data, &valid_payload, sizeof(phear));
  1. 在start函数中增加参数合法性校验和内存分配结果校验:
void start(HINSTANCE mhandle) {
    
    phear * payload = (phear *)data;
    char * buffer;

    // 校验length取值合法性
    if (payload->length <= 0 || payload->length > DATA_SIZE) {
        return;
    }

    buffer = (char *)malloc(payload->length);
    // 校验内存分配结果
    if (buffer == NULL) {
        return;
    }
    memcpy(buffer, payload->payload, payload->length);

    /* execute our code */
    spawn(buffer, payload->length, payload->key);

    /* clean up after ourselves */
    free(buffer);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:15:00