f0rtex
20-07-2003, 23:26
Hallo Leute
Ich gehe vom folgenden Programm aus:
void function(int a, int b, int c)
{
char buffer1[5];
char buffer2[10];
}
void main()
{
function(1,2,3);
}
Der Compiler macht zuerst mal 3 PUSH's um die Parameter a, b, c auf den Stack zu Pushen. Dann wird noch Speicher für die zwei lokalen Buffer auf dem Stack reserviert.
Ein gcc -S liefert folgenden Output:
...
push dword 3
push dword 2
push dword 1
call function
...
push ebp
mov ebp,esp
sub esp,40
Nun sieht der Stack also wie folgt aus:
+-----------+
| buffer2 | <-- Top of Stack
+-----------+
| buffer1 |
+-----------+
| bp |
+-----------+
| ret | (Instruction Pointer)
+-----------+
| a |
+-----------+
| b |
+-----------+
| c |
+-----------+
Nun, soweit ich mich erinnern kann, kann der Stack nur als vielfaches von 4 Bytes adressiert werden.
D.h. doch, dass ich für den buffer1 8 Bytes und für den buffer2 12 Bytes auf dem Stack reserviern muss?
Mich verwirrt nun folgendes:
Wieso macht der gcc ein
sub esp, 40
anstatt ein
sub esp, 20
?
Ich hoffe, dass meine Frage verständlich ist.
Best wishes
f0rtex
Ich gehe vom folgenden Programm aus:
void function(int a, int b, int c)
{
char buffer1[5];
char buffer2[10];
}
void main()
{
function(1,2,3);
}
Der Compiler macht zuerst mal 3 PUSH's um die Parameter a, b, c auf den Stack zu Pushen. Dann wird noch Speicher für die zwei lokalen Buffer auf dem Stack reserviert.
Ein gcc -S liefert folgenden Output:
...
push dword 3
push dword 2
push dword 1
call function
...
push ebp
mov ebp,esp
sub esp,40
Nun sieht der Stack also wie folgt aus:
+-----------+
| buffer2 | <-- Top of Stack
+-----------+
| buffer1 |
+-----------+
| bp |
+-----------+
| ret | (Instruction Pointer)
+-----------+
| a |
+-----------+
| b |
+-----------+
| c |
+-----------+
Nun, soweit ich mich erinnern kann, kann der Stack nur als vielfaches von 4 Bytes adressiert werden.
D.h. doch, dass ich für den buffer1 8 Bytes und für den buffer2 12 Bytes auf dem Stack reserviern muss?
Mich verwirrt nun folgendes:
Wieso macht der gcc ein
sub esp, 40
anstatt ein
sub esp, 20
?
Ich hoffe, dass meine Frage verständlich ist.
Best wishes
f0rtex