我正在使用 gcc (SUSE Linux) 7.2.1 20171020 编译以下 C 程序 strcmp.c:
#include <stdio.h>
#include <string.h>
int main () {
char str1[] = "e";
char str2[] = "pi";
int ret;
ret = strcmp(str1, str2);
printf("val: %i\n", ret);
return(0);
}
我用以下方法编译:
gcc -Wall -Wextra -fsanitize=address strcmp.c
当我运行它时,我得到:
./a.out
val: -1
这对我来说是一个惊喜,我本来预计结果是-11。事实上,当我按以下方式编译程序时,我得到了这一点:
gcc -Wall -Wextra strcmp.c
为什么要给予选择-fsanitize=address
改变结果?
Asan 提供了一个包装器strcmp
来检测内存溢出。他们的版本 https://github.com/llvm-mirror/compiler-rt/blob/77712da5be6ad0e4483747826547756c15d1f4c3/lib/sanitizer_common/sanitizer_common_interceptors.inc#L422仅返回 -1、0 或 +1(仍然符合标准)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)