gpt4 book ai didi

c - strncmp 的这种用法是否包含越界读取?

转载 作者:太空狗 更新时间:2023-10-29 16:37:29 36 4
gpt4 key购买 nike

Fortify 表示这是越界读取:

if (strncmp("test string", "less than 32 char", 32) == 0)
{
...
}

表示函数从小于32个字符的边界外读取数据。

如果 strncmp 超过 32 个字符并且第二个字符串小于 32 个字符,是否真的有发现?

最佳答案

出于性能原因,标准字符串函数的实现通常会在自然对齐的寄存器宽度 block 中处理数据。这可能导致读取访问超过源数据对象的末尾,但对齐保证代码的行为与内存异常方面的原始实现完全一样。每个宽访问都包含在单个页面中,并且不会触及字节实现也不会触及的页面。

我会声称此类实现包含在 C 的假设规则中,也就是说,它们的行为“就像”遵循抽象功能规范一样。

这种优化实现的一个例子是 OpenSolaris's strcmp() for SPARC v8 .这是我大约 15 年前编写的代码,以及其他性能优化的字符串函数。

但是,各种内存检查工具会提示此类代码,因为它的使用会导致访问超出分配的数据对象的限制,即使越界读取访问在设计上是无害的。

关于c - strncmp 的这种用法是否包含越界读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38878195/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com