1
Considérons le code ci-dessous. Aucune erreur ne s'affiche lorsque je compile et que je l'exécute avec le désinfectant d'adresse. Mais il devrait y avoir une erreur juste en assignant/accédant à l'emplacement de mémoire hors limites? Pourquoi le désinfectant ne le détecte-t-il pas?Faux négatif avec l'adresse aseptiseur?
int arr[30];
int main(){
arr[40] = 34;
printf(“%d”, arr[40]);
}
Merci!
clang -fsanitize=address -fno-omit-frame-pointer test.c
./a.out
Mais même si je fais int arr [30] local, au lieu de global, il ne jette pas une erreur. Même en utilisant -fno-common ne génère pas d'erreur. –
Bien sûr, c'est la réponse A1. Fondamentalement, l'interface GCC est assez "astucieuse" pour jeter l'accès de mauvaise qualité à un stade précoce, avant qu'ASan ait une chance d'intervenir. – yugr