Single buffer overflow/underflow
int x[10];
x[10] = 5; -> Error!!
x[-4] = 3; -> Error!!
Single Buffer Overflow [PDF]
Multiple buffer overflow/underflow
int y[10][10][10];
y[10][3][4] = 5; -> Error!!
y[3][10][7] = 11; -> Error!!
y[3][2][10] = 8; -> Error!!
y[-3][6][4] = 5; -> Error!!
y[3][-4][9] = 12; -> Error!!
and so on...
See Video
Struct test
typedef struct test_s {
char a[10];
char b[10];
char c[10][5];
} TEST;
...
TEST test;
test.a[-1] = 3; -> Error!!
test.a[10] = 6; -> Error!!
test.b[-2] = 7; -> Error!!
test.b[11] = 4; -> Error!!
test.c[-2][3] = 7; -> Error!!
test.c[10][2] = 4; -> Error!!
test.c[0][19] = 4; -> Error!!
test.c[8][-1] = 4; -> Error!!
and so on...
Null Pointer and pointer test
int *p;
int **pp;
TEST test;
TEST *ptest;
...
p = NULL;
*p = 1; -> Error!!
pp = &p;
**pp = 1; -> Error!!
ptest = &test;
ptest->c[0][19] = 4; -> Error!!
ptest->c[8][-1] = 1; -> Error!!
ptest = NULL;
ptest->c[8][0] = 1; -> Error!!
and so on...