exit.c
------------------------------------------------------------------------------
#include <unistd.h>
void main() {
exit(0);
}
------------------------------------------------------------------------------
gcc -o exit -static exit.c
通过gdb反汇编_exit调用,观察到底发生了什么:
------------------------------------------------------------------------------
0x800034c <_exit>: pushl %ebp
0x800034d <_exit+1>: movl %esp,%ebp
0x800034f <_exit+3>: pushl %ebx
0x8000350 <_exit+4>: movl $0x1,%eax 0x1放到寄存器EAX,0x1是系统调用表的索引,就是exit
0x8000355 <_exit+9>: movl 0x8(%ebp),%ebx 放置退出码,返回0, 以表示没有错误
0x8000358 <_exit+12>: int $0x80
0x800035a <_exit+14>: movl 0xfffffffc(%ebp),%ebx
0x800035d <_exit+17>: movl %ebp,%esp
0x800035f <_exit+19>: popl %ebp
0x8000360 <_exit+20>: ret
0x8000361 <_exit+21>: nop
0x8000362 <_exit+22>: nop
0x8000363 <_exit+23>: nop
------------------------------------------------------------------------------