Strcmp在-fsanitize = address下返回不同的结果

时间:2018-03-10 20:14:58

标签: gcc address-sanitizer

我正在使用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选项会改变结果?

1 个答案:

答案 0 :(得分:3)

Asan为strcmp提供了一个检测内存溢出的包装器。 Their version仅返回-1,0或+1(仍符合标准)。