write()実行後にexit()しないとコアダンプする
低レイヤーに興味があって、現在x86アセンブリ言語を勉強中。
環境はUbuntu13.10, アセンブラにはnasmを使用。
例えば次のように書くと、標準出力に"HelloWorld"が出力される。
BITS 32 section .data msg db "HelloWorld", 0x0a section .text global _start _start: ;SYSCALL: write(1, msg, 14) mov eax,4 mov ebx,4 mov ecx,msg mov edx,11 int 0x80 ;SYSCALL: exit(0) mov eax,1 mov ebx,0 int 0x80
実行結果: HelloWorld
しかし、上のソースコードでexit(0)の部分のみを削除するとコアダンプする。
実行結果: HelloWorld Segmentation fault(コアダンプ)
この理由がよく分からないんだけど・・・。
普通にC言語で書いた場合、最後にexit 0;をつけてもつけなくても
ちゃんと動作する。
アセンブリ言語の場合は何か違うのかなー?
Cの場合はコンパイラが自動でexit(0)を挿入してくれるとか?
そもそも何でセグメ違反になるんだろう。