The Stack
With a colleague, sketch out how the following items would be arranged on the stack.
Assume the following:
- We are dealing with a 32-bit, little endian processor.
- int's are four bytes each
Code:
int w = 1;
int x = 2;
int y = 3;
int z = 4;
int int_array[4] = {5,6,7,8};
You can check your answer by looking at the following output from gcc on the above code.
mov DWORD PTR [rbp-4], 1
mov DWORD PTR [rbp-8], 2
mov DWORD PTR [rbp-12], 3
mov DWORD PTR [rbp-16], 4
mov DWORD PTR [rbp-32], 5
mov DWORD PTR [rbp-28], 6
mov DWORD PTR [rbp-24], 7
mov DWORD PTR [rbp-20], 8
Finally, if I executed the command, int_array[4] = 9;
, which values change?
Answer:
Take a look at this output:
int_array[0] located at 0xffccb9b0
int_array[1] located at 0xffccb9b4
int_array[2] located at 0xffccb9b8
int_array[3] located at 0xffccb9bc
int_array[4] located at 0xffccb9c0
z located at 0xffccb9c0
Which is generated by running:
printf("int_array[0] located at %p\n", &int_array[0]);
printf("int_array[1] located at %p\n", &int_array[1]);
printf("int_array[2] located at %p\n", &int_array[2]);
printf("int_array[3] located at %p\n", &int_array[3]);
printf("int_array[4] located at %p\n", &int_array[4]);
printf("z located at %p\n", &z);