小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


Visual Studio 2015でアセンブリコードを出力する方法

はじめに

Visual Studioでアセンブリコードを出力する方法です。

  • Windows10
  • Visual Studio 2015 Update3
Visual Studioでアセンブリコードを出力する方法

f:id:replication:20190630212848p:plain
ソリューションのプロパティから「C/C++」→「出力ファイル」→「アセンブリの出力」で「アセンブリコードのみ(/FA)」を選択します。
ビルド後、Debug/Releaseのフォルダにソリューション名.asm(Assembler Source)が出力されます。

ちなみに、「アセンブリコードとソースコード(/FAs)」を選ぶと、アセンブリコード内にC/C++のソースプログラムが埋め込まれて、ソースプログラムに対応するアセンブリコードがわかりやすく出力されます。

例:

; 11   : {

	push	ebp
	mov	ebp, esp
	sub	esp, 12					; 0000000cH
	mov	eax, DWORD PTR ___security_cookie
	xor	eax, ebp
	mov	DWORD PTR __$ArrayPad$[ebp], eax

; 12   : 	char temp[5] = { 0 };
; 13   : 	strcpy(temp, "xxxxx");

	mov	eax, DWORD PTR ??_C@_05HDGBDIJL@xxxxx?$AA@
	mov	DWORD PTR _temp$[ebp], eax
	mov	ax, WORD PTR ??_C@_05HDGBDIJL@xxxxx?$AA@+4
	mov	WORD PTR _temp$[ebp+4], ax

; 14   : 
; 15   : 	printf("%s\n", temp);

	lea	eax, DWORD PTR _temp$[ebp]
	push	eax
	push	OFFSET ??_C@_03OFAPEBGM@?$CFs?6?$AA@
	call	_printf

; 16   : 	system("pause");

	push	OFFSET ??_C@_05PDJBBECF@pause?$AA@
	call	DWORD PTR __imp__system

; 17   : 
; 18   : 	return 0;
; 19   : }

	mov	ecx, DWORD PTR __$ArrayPad$[ebp]
	add	esp, 12					; 0000000cH
	xor	ecx, ebp
	xor	eax, eax
	call	@__security_check_cookie@4
	mov	esp, ebp
	pop	ebp
	ret	0
_main	ENDP
_TEXT	ENDS