分类: LINUX
2015-03-29 11:13:14
20 i386 getpid sys_getpid 系统调用号为20,名字是getpid,内核入口sys_getpid。 在linux下man getpid 写一个C程序,打印进程的pid号码。 pid_t事实上是int类型。 使用内嵌汇编调用getpid系统调用如下: 关于x86内嵌汇编,下面的链接讲的很好。 http://www.ibm.com/developerworks/cn/linux/sdk/assemble/inline/ mov $0x14,%%eax 是将系统调用20给eax寄存器 int $0x80 trap指令,从用户态进入内核态,执行20号系统调用 mov %%eax,$0 "=m"(pid) 系统调用的结果,即进程pid在eax寄存器里,将eax赋值到pid变量里。 =代表输出,m代表内存。直接将系统调用结果放到内存里。 objdump -d getpid-asm | less mov $0x14,%eax int $0x80 mov %eax,0x1c(%esp) 是内嵌汇编的代码,可以看出直接把eax的值放到栈esp+0x1c的内存里,这是临时变量pid的位置。 这是程序输出./getpid的结果类似。每次执行的pid号不一样。