Listing ASM, Visual Studio, cl.exe /FA

0

Cześć

Kompiluje sobie kod z C++ np. hello world przy użyciu cl.exe kod /FA aby uzyskać kod ASM. Teraz przy kompilowaniu kodu C, taki plik hw zajmuje z 3KB, jednak hw z c++ to jest juz 300KB i samego HW trzeba szukać w tej ścianie kodu. Czy jest jakaś metoda aby wygenerować prosty kod asm w C++, czyli dla std::cout<< "napis" to powinno być kilka linii asm bo jest tam tylko main.

?

1

A wiesz co to jest std::cout? To jest dość złożony obiekt klasy ostream która dziedziczy jeszcze po ios i ios_base i dodatkowo operuje w swoim kodzie na całej masie innych klas i obiektów z biblioteki standardowej c++
Nijak sie to ma do printf("%$s", napis) które jest wywołaniem jednej funkcji

To trochę jakbyś pytał czemu prom kosmiczny ma tyle różnych guzików i wajch w kokpicie skoro ty po prostu chcesz nim przejechać po pasie startowym i twój rower, którym jeździsz po tym samym pasie, jest o wiele mniej mniej złożony...

0

Zdaje sobie sprawę, że cout jest bardziej rozbudowane, ale jednak sam main jest prawe tak samo prosty jak w przypadku C, mamy wrzucony adres pod którym znajduje się napis, a później call. Zastanawiałem się, czy da się zmusić kompilator, aby zwrócił w listingu samego _maina lub uczynił sam kod bardziej higienicznym wizualnie :)

0

ale jednak sam main jest prawe tak samo prosty jak w przypadku C

No właśnie rzecz w tym, że jest zupełnie na odwrót, co już Ci @Shalom opisał - gdyby był faktycznie tak samo prosty, otrzymałbyś podobny rezultat.

0

Hmm z tego co widzę to po prostu CL inlinuje / statyczne kompiluje kupę rzeczy i stąd taka ściana kodu. Jak puscisz gcc -S to dostajesz równie prostego maina:

main:
.LFB1023:
	pushq	%rbp
	.seh_pushreg	%rbp
	movq	%rsp, %rbp
	.seh_setframe	%rbp, 0
	subq	$32, %rsp
	.seh_stackalloc	32
	.seh_endprologue
	call	__main
	leaq	.LC0(%rip), %rdx
	movq	.refptr._ZSt4cout(%rip), %rcx
	call	_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
	movl	$0, %eax
	addq	$32, %rsp
	popq	%rbp
	ret

1 użytkowników online, w tym zalogowanych: 0, gości: 1