Small code to show overflow
But when I compile and run - buffer_one is not being overwritten when the byte size of buffer_two overflows - can someone please explain why?
Code:
#include <stdio.h>#include <string.h>
int main(int argc, char *argv[]) {
int value = 5;
char buffer_one[8], buffer_two[8];
strcpy(buffer_two, "two"); //Put "one" into buffer_one
strcpy(buffer_one, "one"); //Put "two" into buffer_two
printf("[BEFORE] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
printf("[BEFORE] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
printf("[BEFORE] value is at %p and is %d (0x%08x)\n", &value, value, value);
printf("\n[STRCPY] copying %zu bytes into buffer_two\n\n", strlen(argv[1]));
strcpy(buffer_two, argv[1]); //Copy first argument into buffer_two.
printf("[AFTER] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
printf("[AFTER] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
printf("[AFTER] value is at %p and is %d (0x%08x)\n", &value, value, value);
}
user@ubuntu:~/examples$ ./overflow_example 1234567890
[BEFORE] buffer_two is at 0x7fff918ff210 and contains 'two'
[BEFORE] buffer_one is at 0x7fff918ff200 and contains 'one'
[BEFORE] value is at 0x7fff918ff1fc and is 5 (0x00000005)
[STRCPY] copying 10 bytes into buffer_two
[AFTER] buffer_two is at 0x7fff918ff210 and contains '1234567890'
[AFTER] buffer_one is at 0x7fff918ff200 and contains 'one'
[AFTER] value is at 0x7fff918ff1fc and is 5 (0x00000005)
*** stack smashing detected ***: ./overflow_example terminated
Aborted (core dumped)