此代码如何使缓冲区溢出

德米特里·托尔马乔夫(Dmitry Tolmachov)

Chrome版本51.0.2704.84

在gl.bufferSubData行上,chrome表示:

WebGL: INVALID_VALUE: bufferSubData: buffer overflow

请注意,我使用maxAmountWritten变量跟踪了VBO的长度。当我用bufferData设置它的大小时,我什至把它增加了1个元素。因此subBufferData不可能覆盖VBO的边缘。

实际代码:

updatePlacementVBO() {
    var gl = this.sceneApi.getGlContext();

    var paramsVbo = this.placementVBO;
    if (!paramsVbo) {
        paramsVbo = gl.createBuffer();
        this.maxAmountWritten = 0;
    }
    var written = 0;
    var permanentBuffer = [];
    for (var i = 0; i < this.mdxObjectList.length; i++) {
        var mdxObject = this.mdxObjectList[i];
        if (!mdxObject.getIsRendered()) continue;

        var placementMatrix = mdxObject.placementMatrix;
        var diffuseColor = mdxObject.getDiffuseColor();
        for (var j = 0; j < 16; j++) {
            permanentBuffer[i*20+j] = placementMatrix[j];
        }
        for (var j = 0; j < 4; j++) {
            permanentBuffer[i*20+16+j] = diffuseColor[j];
        }

        written++;
    }

    if (written>0) {
        gl.bindBuffer(gl.ARRAY_BUFFER, paramsVbo);
        if (written > this.maxAmountWritten) {
            permanentBuffer[permanentBuffer.length] = 0;

            var typedBuf = new Float32Array(permanentBuffer);
            gl.bufferData(gl.ARRAY_BUFFER, typedBuf, gl.DYNAMIC_DRAW);

            this.maxAmountWritten = written;
        } else {
            gl.bufferSubData(gl.ARRAY_BUFFER, 0, new Float32Array(permanentBuffer));
        }
    }
    this.placementVBO = paramsVbo;
    this.lastUpdatedNumber = written;
}

我没主意了

基林索斯

它看起来像paramsVBO是绑定缓冲区,当else语句被调用并且没有调用bufferData来初始化带有任何信息的缓冲区目标时

有关创建缓冲区的信息,请参见此链接除此之外,看起来您处在正确的轨道上,只是该缓冲区没有被初始化(无论如何从表面上看)

编辑:也许也给一个尝试反思到缓冲区,确保它是正确的大小,看看有多少正在使用

gl.getBufferParameter(gl.ARRAY_BUFFER,gl.BUFFER_SIZE);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

代码中的缓冲区溢出标识

来自分类常见问题

为什么此代码容易受到缓冲区溢出攻击?

来自分类Dev

缓冲区溢出示例:为什么此代码很危险?

来自分类Dev

为什么此代码中的缓冲区溢出行为与我预期的不同?

来自分类Dev

如何实现缓冲区溢出

来自分类Dev

谁能向我解释/显示此代码如何获得输入,以及该代码如何容易受到缓冲区溢出的电弧注入的影响?

来自分类Dev

尝试缓冲区溢出

来自分类Dev

发生缓冲区溢出

来自分类Dev

防止缓冲区溢出

来自分类Dev

缓冲区溢出实现

来自分类Dev

缓冲区溢出漏洞

来自分类Dev

试验缓冲区溢出

来自分类Dev

缓冲区溢出漏洞

来自分类Dev

试验缓冲区溢出

来自分类Dev

缓冲区溢出 C

来自分类Dev

缓冲区溢出/溢出说明?

来自分类Dev

缓冲区溢出/溢出说明?

来自分类Dev

如何创建缓冲区溢出以测试Address Sanitizer?

来自分类Dev

GCC如何检测堆栈缓冲区溢出

来自分类Dev

如何处理“缓冲区队列溢出,丢弃”。(ffmpeg)

来自分类Dev

如何在现代系统上测试缓冲区溢出?

来自分类Dev

写缓冲区溢出漏洞-如何找出shellcode的地址?

来自分类Dev

从文件读取时如何停止堆栈缓冲区溢出?

来自分类Dev

写缓冲区溢出漏洞-如何找出shellcode的地址?

来自分类Dev

该机器码如何防止缓冲区溢出?

来自分类Dev

为什么此代码为什么在Visual Studio 2012上的代码分析中发出缓冲区溢出警告(C6385 / C6386)?

来自分类Dev

缓冲区溢出缓冲区长度

来自分类Dev

强制缓冲区溢出以了解

来自分类Dev

利用缓冲区溢出读取操作