系统调用从User进入Kernel
2018-01-11 19:14
155 查看
#include"stdio.h" int main() { int pid; asm volatile( "movl $0x14,%eax\n\t" "int $0x80\n\t" "mov %%eax,%0\n\t" : "=m" (pid) ); printf("the pid is :%d\n",pid); }
这是今天看代码的时候看到一段,mmp长见识了,以前没见过这是什么写法?自然是去搜了一下,原来是汇编嵌入c语言的写法呀,通过汇编嵌入的方式来实现系统调用。这种写法的原型是这样的:
#include"stdio.h" int main() { asm volatile( 语句:"" 输出:"" 输入:"" 破坏语句:"" ); }
代码的意思是通过80h中断从user进入kernel是经典模式,eax是传递系统,这里是通过触发了80h中断,调用eax来获取pid。
此外还有一个以前学c语言的时候用的通过库函数进行的系统调用的方法
#include <stdio.h> #include <unistd.h> int main() { int pid; pid = getpid(); printf("pid is:%d\n",pid); return 0; }
相关文章推荐
- 带着O_CREAT和O_RDWR进入linux系统调用open函数
- Android调用系统相机拍照后不进入预览确认
- ios 调用系统设置,并进入相关的设置项
- kernel 系统调用----system call
- Redhat Linux 6.4 chown: invalid user: `root:root`错误 无法进入系统
- Android 系统镜像: boot.img kernel.img ramdisk.img system.img userdata.img cache.img recovery.img
- Linux VFS 之 open系统调用(kernel 3.4)
- 窥探 kernel,just for fun --- 有关系统调用的几个知识点
- linux-kernel 3.5.3Tcp系统调用,源码分析4-inet_init
- Android 中用内核模块实现系统调用(Implement system call by kernel module in Android)
- 窥探 kernel,just for fun --- 系统调用在用户空间的访问
- base-kernel-系统调用
- android系统镜像:boot.img kernel.img ramdisk.img system.img userdata.img cache.img recovery.img
- linux-kernel 3.5.3Tcp系统调用,源码分析5-原子操作
- Linux VFS 之 mount系统调用(kernel 3.4)
- 窥探 kernel,just for fun --- 系统调用过程分析
- linux-kernel 3.5.3Tcp系统调用,源码分析1-宏SYSCALL_DEFINE
- 漫谈兼容内核之五:Kernel-win32的系统调用机制
- linux-kernel 3.5.3Tcp系统调用,源码分析2-sys_socket & sock_create
- linux-kernel 3.5.3Tcp系统调用,源码分析6-bind系统调用