话不多说直接放图,该图截取自李治军老师的操作系统课程。
- 首先第一步,用户调用printf,printf代码内部触发0x80中断。这个中断在系统初始化的时候被设置成了system_call。触发0x80中断后,就会去调用system_call。
- 接着system_call 根据传入进来的参数(系统调用号)查表sys_call_table,找到系统调用的地址
- 最后转到系统调用地址中执行sys_write系统调用。
总的来说,具体实现就是int 0x80调用system_call, system_call 根据系统调用号执行相应的系统调用。
以下是另外一个例子
引申:懂得系统怎么进行系统调用之后,我们便可以设置自己的系统调用函数了。
- 首先编写系统调用函数
- 首先要在sys_call_table 中注册系统调用函数
- 通过int 0x80封装一下,比如
eax = 系统调用号
int 0x80