strcmp returns -fsanitize=address 下的不同结果
Strcmp returns different result under -fsanitize=address
我正在使用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
提供了一个包装器来检测内存溢出。 Their version returns 仅 -1、0 或 +1(仍然是 standards-compliant)。
我正在使用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
提供了一个包装器来检测内存溢出。 Their version returns 仅 -1、0 或 +1(仍然是 standards-compliant)。