reference:
https://kristerw.blogspot.com/2018/06/useful-gcc-address-sanitizer-checks-not.html
$ gcc -O -fsanitize=address file.c
$ env ASAN_OPTIONS="detect_stack_use_after_return=1" ./a.out
https://kristerw.blogspot.com/2018/06/useful-gcc-address-sanitizer-checks-not.html
$ gcc -O -fsanitize=address file.c
$ env ASAN_OPTIONS="detect_stack_use_after_return=1" ./a.out
int *ptr; __attribute__((noinline)) void foo(void) { int a; ptr = &a; } int main(void) { foo(); return *ptr; // Error }
Pointer comparison:
$ gcc -fsanitize=address,pointer-compare file.c
$ env ASAN_OPTIONS="detect_invalid_pointer_pairs=1" ./a.out
#include <stdlib.h> int main(void) { char *p = malloc(42); char *q = malloc(42); int tmp = p < q; // Error free(p); free(q); return tmp; }
Pointer subtraction:
$ gcc -O -fsanitize=address,pointer-subtract file.c
$ env ASAN_OPTIONS="detect_invalid_pointer_pairs=1" ./a.out
#include <stdlib.h> int main(void) { char *p = malloc(42); char *q = malloc(42); int tmp = p - q; // Error free(p); free(q); return tmp; }
vector boundary check:
$ g++ -O -fsanitize=address -D_GLIBCXX_SANITIZE_VECTOR file.cpp
#include <vector> int main() { std::vector<int> v(2); int* p = v.data(); v.pop_back(); return p[1]; // Error }
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.