C言語

gccのオプションを利用すると、アセンブリ言語ソースをアセンブルすることができるようなので、実際にソースを用意して試してみました。

アセンブリ言語のソース

アセンブリ言語のソースファイルは、前回作成したHello Worldを表示するだけのプログラムです。

	.file	"source.c"
	.def	___main;	.scl	2;	.type	32;	.endef
	.section .rdata,"dr"
LC0:
	.ascii "Hello World\0"
	.text
	.globl	_main
	.def	_main;	.scl	2;	.type	32;	.endef
_main:
LFB10:
	.cfi_startproc
	pushl	%ebp
	.cfi_def_cfa_offset 8
	.cfi_offset 5, -8
	movl	%esp, %ebp
	.cfi_def_cfa_register 5
	andl	$-16, %esp
	subl	$16, %esp
	call	___main
	movl	$LC0, (%esp)
	call	_puts
	movl	$0, %eax
	leave
	.cfi_restore 5
	.cfi_def_cfa 4, 4
	ret
	.cfi_endproc
LFE10:
	.ident	"GCC: (GNU) 5.3.0"
	.def	_puts;	.scl	2;	.type	32;	.endef

アセンブル

gccの-cオプションを利用して、アセンブリ言語のソースファイルをアセンブルします。

$ gcc -c source.s

アセンブルされたファイルをメモ帳で開いてみると次のようになりました。

L     ィ       .text           $     €           0`.data                               @ 0タ.bss                                € 0タ.rdata             (              @ 0@/4                 4              @ 0@/15             8   H  ・         @ 0@U牙・・・    ヌ$    ・    ク    ノテ瑞食ello World GCC: (GNU) 5.3.0           zR |・           !    A・B
]ナ  
          
                   .file         gsource.c          _main                            .text          !                .data                            .bss                             .rdata                                                             $          8                ___main          _puts            .   .rdata$zzz .eh_frame .rdata$zzz .eh_frame 

拡張子を.exeに変更してコマンドプロンプトから実行しましたが、次のようなエラーが表示されて実行できませんでした。

このバージョンの C:\Users\irail\Documents\Program\source.exe は、実行中の Windows のバージョンと互換性がありません。コンピューターのシステム情報を確認してから、ソフトウェアの発行元に問い合わせてください。

次は、リンクを行ってライブラリを結合してみます。

 

参考文献

 

【C言語】gccでアセンブリ言語のソースファイルをアセンブルする
Tagged on:

コメントを残す