我想了解一個簡單的C函數的底層彙編。反彙編簡單的C函數
program1.c
void function() {
char buffer[1];
}
=>
push %ebp
mov %esp, %ebp
sub $0x10, %esp
leave
ret
不知道它是如何到達這裏爲0x10?不是字符1字節,它是8位,所以它應該是0x08?
program2.c
void function() {
char buffer[4];
}
=>
push %ebp
mov %esp, %ebp
sub $0x18, %esp
mov ...
mov ...
[a bunch of random instructions]
不知道它是如何到達這裏爲0x18要麼?另外,爲什麼在SUB
指令後有這麼多附加指令?我所做的只是將陣列的長度從1更改爲4.
這些數字是字節。由於對齊和禁用優化,它們比您要求的大。 – Jester
哦,所以0x10是10個字節而不是10位? –
在這種情況下,計數以字節完成,以位計數是毫無意義的。 –