Linux下C程序启动时的系统调用

写程序跟踪发现,在Linux i386中,一个程序体完全为空的C语言程序启动时要进行近100个系统调用,如下所示。 [ 1]syscall: 11 //execve [ 2]syscall: 45 //brk 改变进程的数据段边界 [ 3]syscall: 45 //brk [ 4]syscall: 33 //access 确定文件的可存取性 [ 5]syscall: 33 //access [ 6]syscall: 192 //mmap2 映射虚拟内存页 [ 7]syscall: 192 //mmap2 [ 8]syscall: 33 //access //access [ 9]syscall: 33 //access //access [10]syscall: 5 //open 打开文件 [11]syscall: 5 //open [12]syscall: 197 //fstat64 取文件系统信息 [13]syscall: 197 //fstat64 [14]syscall: 192 //mmap2 [15]syscall: 192 //mmap2 [16]syscall: 6 //close 关闭文件描述字 [17]syscall: 6 //close [18]syscall: 33 //access [19]syscall: 33 //access [20]syscall: 5 //open [21]syscall: 5 //open [22]syscall: 3 //read 读文件 [23]syscall: 3 //read [24]syscall: 197 //fstat64 [25]syscall: 197 //fstat64 [26]syscall: 192 //mmap2 [27]syscall: 192 //mmap2 [28]syscall: 192 //mmap2 [29]syscall: 192 //mmap2 [30]syscall: 192 //mmap2 [31]syscall: 192 //mmap2 [32]syscall: 6 //close [33]syscall: 6 //close [34]syscall: 33 //access [35]syscall: 33 //access [36]syscall: 5 //open [37]syscall: 5 //open [38]syscall: 3 //read [39]syscall: 3 //read [40]syscall: 197 //fstat64 [41]syscall: 197 //fstat64 [42]syscall: 192 //mmap2 [43]syscall: 192 //mmap2 [44]syscall: 192 //mmap2 [45]syscall: 192 //mmap2 [46]syscall: 6 //close [47]syscall: 6 //close [48]syscall: 33 //access [49]syscall: 33 //access [50]syscall: 5 //open [51]syscall: 5 //open [52]syscall: 3 //read [53]syscall: 3 //read [54]syscall: 197 //fstat64 [55]syscall: 197 //fstat64 [56]syscall: 192 //mmap2 [57]syscall: 192 //mmap2 [58]syscall: 192 //mmap2 [59]syscall: 192 //mmap2 [60]syscall: 192 //mmap2 [61]syscall: 192 //mmap2 [62]syscall: 6 //close [63]syscall: 6 //close [64]syscall: 33 //access [65]syscall: 33 //access [66]syscall: 5 //open [67]syscall: 5 //open [68]syscall: 3 //read [69]syscall: 3 //read [70]syscall: 197 //fstat64 [71]syscall: 197 //fstat64 [72]syscall: 192 //mmap2 [73]syscall: 192 //mmap2 [74]syscall: 192 //mmap2 [75]syscall: 192 //mmap2 [76]syscall: 192 //mmap2 [77]syscall: 192 //mmap2 [78]syscall: 6 //close [79]syscall: 6 //close [80]syscall: 192 //mmap2 [81]syscall: 192 //mmap2 [82]syscall: 243 //set_thread_area 设置线程入口 [83]syscall: 243 //set_thread_area [84]syscall: 125 //mprotect 设置内存映像保护 [85]syscall: 125 //mprotect [86]syscall: 125 //mprotect [87]syscall: 125 //mprotect [88]syscall: 125 //mprotect [89]syscall: 125 //mprotect [90]syscall: 125 //mprotect [91]syscall: 125 //mprotect [92]syscall: 125 //mprotect [93]syscall: 125 //mprotect [94]syscall: 125 //mprotect [95]syscall: 125 //mprotect [96]syscall: 91 //munmap 去除内存页映射 [97]syscall: 91 //munmap [98]syscall: 252 //exit_group 结束

程序很简单

int main()
{
    return 0;
}

相关日志