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
",getpid());
    return 0;
}

5.编写嵌入式汇编代码getpid_asm.c

#include<stdio.h>
#include<unistd.h>
int main(void)
{
    int pid;
    asm volatile(
        "mov $0,%%ebx
	" //ebx寄存器清零
        "mov $0x14,%%eax
	"//把getpid的系统调用号20传入eax寄存器
        "int $0x80
	"//执行系统调用
        "mov %%eax,%0
	"//把eax寄存器的值赋给pid   
        : "=m"(pid)   
    );
    printf("Process id:%d
",pid);
    return 0;
}

6.测试

原文地址:https://www.cnblogs.com/bestYZF/p/13945650.html