### Heap out-of-bounds
```c=
#include<stdio.h>
int main() {
int *address = malloc(sizeof(int)*10);
printf("%d\n",address[11]); // BOOM
return 0;
}
```
### ASan report

### valgrind report

### ASan <u>不能</u> , valgrind <u>不能</u>
---
### Global out-of-bounds
```c=
#include<stdio.h>
int arrays[10] = {0};
int main() {
printf("%d\n",arrays[11]); // BOOM
return 0;
}
```
### ASan report

### valgrind report

### ASan <u>不能</u> , valgrind <u>能</u>
---
<br>
## Stack out-of-bounds
```c=
#include<stdio.h>
int main() {
int arrays[10] = {0};
printf("%d\n",arrays[11]); // BOOM
return 0;
}
```
### ASan report

### valgrind report

### ASan <u>不能</u> , valgrind <u>能</u>
## Use-after-free
```c=
#include<stdio.h>
int main() {
int *arrays = malloc(sizeof(int)*100);
free(arrays);
printf("%d\n",arrays[0]); // BOOM
return 0;
}
```
### ASan report

### valgrind report

### ASan <u>不能</u> , valgrind <u>不能</u>
---
<br>
## Use-after-return
```c=
#include<stdio.h>
char *x;
void foo(){
char t = 'a';
x = &t;
}
int main(){
foo();
*x = 'b';
return 0;
}
```
### ASan report

### valgrind report

### ASan <u>不能</u> , valgrind <u>能</u>
---
<br>
## Part II
```c=
#include<stdio.h>
int main() {
int arrays[10] = {0};
int next[1000] = {0};
printf("%d\n",arrays[100 + 100]);
return 0;
}
```
### ASan report

### valgrind report

### ASan <u>能</u> , valgrind <u>能</u>
{"metaMigratedAt":"2023-06-16T00:14:46.452Z","metaMigratedFrom":"Content","title":"Untitled","breaks":true,"contributors":"[{\"id\":\"32e92895-af73-41b7-b396-121a8ac908dc\",\"add\":2318,\"del\":458}]"}