1.系统调用是应用程序与操作系统内核的接口。
2.系统调用入口地址:linux :0x80
windows: 0x2E
3.Linux下的系统调用
1. 在x86下由0x80中断实现系统调用,通用寄存器完成参数传递。EAX:用来传递系统调用的接口号。每一个系统调用都对应与内核源码中一个函数以“sys_”开头。它们以c语言的形式定义在“usr/include/unistd.h”中,可以通过在代码中include该文件绕过glibc的文件读取。
操作系统通过中断来从用户态切换到内核态, int 0x80 ,eax。
用户代码->中断->中断服务程序->系统调用表->系统调用->用户代码
2 .linux新形系统调用
sysenter.直接跳到某个寄存器指定的函数执行
4.Linux 与Windows系统调用区别
Application ./ progam fwrite() fwrite() program.exe
libc.a write() wtrite() Libcmt.lib
libc.so msvcr90.dll
CRT libc.a interrupt() 0x80
libc.so
API(windows) NtWriteFile() kernel32.dll
interrupt 0x2e NTDLL.dll
kernel sys_write() lowritefile()
参考书:《程序员的自我修养》