2020-2021-1 20209310《Linux内核原理与分析》第五周作业

  1. 查看系统调用表,选择想要使用的系统调用
    man syscalls

    我选择了getpid。
  2. 查找系统调用号
    从/usr/include/asm/unistd.h 或/usr/include/bits/syscall.h查找得到getpid的系统调用号为20
  3. 用man指令分析getpid

  1. 编写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.测试

posted @ 2020-11-08 20:22  我只是飞  阅读(82)  评论(1编辑  收藏  举报