如何读取堆栈分配内存的元素计数?
How to read the element count of stack allocated memory?
假设我只有一个先前分配给堆栈的内存的指针,我想知道我有多少个元素。怎么做?
MSDN 说:"the use of stackalloc
automatically enables buffer overrun detection features in the common language runtime" 所以我想尺寸保持在某处。
您要查找的信息不存在,您有责任跟踪此信息。
缓冲区溢出检测不检查 "array" 上的越界访问 - 没有数组。相反,它使用在堆栈上分配的内存 之后添加 的随机值。在函数 epilog 中,它检查该值是否仍然存在 - 如果不存在,则终止整个过程。
Buffer overflow protection for stackalloc in .Net
不用说,这并不能确保您不会遭受缓冲区溢出(或下溢,这是这里的主要问题)。它只是试图限制其潜在影响。结合将 stackalloc
ced locals 保持在尽可能小的函数中,这可以非常简单但仍然非常有效地防止恶意代码执行。您仍然可以覆盖(或读取)其他本地人,但您不能覆盖例如函数 return 指针。
假设我只有一个先前分配给堆栈的内存的指针,我想知道我有多少个元素。怎么做?
MSDN 说:"the use of stackalloc
automatically enables buffer overrun detection features in the common language runtime" 所以我想尺寸保持在某处。
您要查找的信息不存在,您有责任跟踪此信息。
缓冲区溢出检测不检查 "array" 上的越界访问 - 没有数组。相反,它使用在堆栈上分配的内存 之后添加 的随机值。在函数 epilog 中,它检查该值是否仍然存在 - 如果不存在,则终止整个过程。
Buffer overflow protection for stackalloc in .Net
不用说,这并不能确保您不会遭受缓冲区溢出(或下溢,这是这里的主要问题)。它只是试图限制其潜在影响。结合将 stackalloc
ced locals 保持在尽可能小的函数中,这可以非常简单但仍然非常有效地防止恶意代码执行。您仍然可以覆盖(或读取)其他本地人,但您不能覆盖例如函数 return 指针。