[+] 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,comdatJakby ktoś mógłby mi wytłumaczyć jaki jest tu ukryty haczyk w tym kodzie, to byłbym bardzo wdzięczny.