2020-2021-1 20209310《Linux内核原理与分析》第五周作业
- 查看系统调用表,选择想要使用的系统调用
man syscalls
我选择了getpid。 - 查找系统调用号
从/usr/include/asm/unistd.h 或/usr/include/bits/syscall.h查找得到getpid的系统调用号为20 - 用man指令分析getpid
- 编写C代码:getpid.c
#include<stdio.h>
#include<unistd.h>
int main(void){
printf("Process id:%d\n",getpid());
return 0;
}
5.编写嵌入式汇编代码getpid_asm.c
#include<stdio.h>
#include<unistd.h>
int main(void)
{
int pid;
asm volatile(
"mov $0,%%ebx\n\t" //ebx寄存器清零
"mov $0x14,%%eax\n\t"//把getpid的系统调用号20传入eax寄存器
"int $0x80\n\t"//执行系统调用
"mov %%eax,%0\n\t"//把eax寄存器的值赋给pid
: "=m"(pid)
);
printf("Process id:%d\n",pid);
return 0;
}
6.测试