比方说,我只有以前分配给堆栈的内存的指针,我想知道我有多少个元素。怎么做?
MSDN说:“ stackalloc
的使用会自动在公共语言运行库中启用缓冲区溢出检测功能”,所以我猜它的大小保持在某个位置。
答案 0 :(得分:3)
您要查找的信息不存在,这是您的责任。
缓冲区溢出检测不检查“数组”上的越界访问-此处没有数组。相反,它使用在堆栈上分配的内存 之后添加的随机值。在函数Epilog中,它检查该值是否仍然存在-如果不是,则终止整个过程。
Buffer overflow protection for stackalloc in .Net
不用说,这并不能确保您不会遭受缓冲区溢出(或下溢,这是这里的主要问题)。它只是试图限制其潜在影响。与使stackalloc
ced本地人保持尽可能小的功能相结合,这可以非常简单但仍然非常有效地防止恶意代码执行。您仍然可以覆盖(或读取)其他本地语言,但不能覆盖例如函数返回指针。