[+] Assembler - wytłumaczenie działania kodu
: 26 lipca 2010, 01:13
Zastanawia mnie kod w assemblerze:
Został on wygenerowany przez G++ z opcją -S
I mam w związku z tym małą prośbę. Czytałem, że gdy używamy funkcji inline, to wstawiany jest jej kod w miejsce wywołania i zaoszczędzamy na wywołaniu instrukcji "call" i przekazywaniu argumentów. Jednak tutaj widzę tą instrukcję, pewnie chodzi o inną rzecz.
Instrukcja nie występuje w kodzie ze zwykłą funkcją, więc pewnie w niej coś tkwi, ale z http://sourceware.org/binutils/docs-2.2 ... ml#Section dużo się nie dowiedziałem.
Jakby ktoś mógłby mi wytłumaczyć jaki jest tu ukryty haczyk w tym kodzie, to byłbym bardzo wdzięczny.
Kod: Zaznacz cały
.file "22v2.cpp"
.section .text._Z1fv,"axG",@progbits,_Z1fv,comdat
.weak _Z1fv
.type _Z1fv, @function
_Z1fv:
.LFB0:
.cfi_startproc
.cfi_personality 0x3,__gxx_personality_v0
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
leave
ret
.cfi_endproc
.LFE0:
.size _Z1fv, .-_Z1fv
.text
.globl main
.type main, @function
main:
.LFB1:
.cfi_startproc
.cfi_personality 0x3,__gxx_personality_v0
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
call _Z1fv
call _Z1fv
call _Z1fv
movl $0, %eax
leave
ret
.cfi_endproc
.LFE1:
.size main, .-main
.ident "GCC: (Debian 4.4.4-7) 4.4.4"
.section .note.GNU-stack,"",@progbits
Kod: Zaznacz cały
inline void f() {}
int main() {
f();
f();
f();
}
Instrukcja
Kod: Zaznacz cały
.section .text._Z1fv,"axG",@progbits,_Z1fv,comdat
Jakby ktoś mógłby mi wytłumaczyć jaki jest tu ukryty haczyk w tym kodzie, to byłbym bardzo wdzięczny.