操作系统课设

一、进程监控

1、目标

  1. 掌握ptrace系统调用的使用。
  2. 了解进程监控和调试的一般过程。

2、准备知识

  1. 通过上网查找资料、查看手册了解ptrace系统调用及其参数。
  2. 了解进程监控的一般过程,即:父进程 fork() 出子进程,子进程调用 exec() 之前,先调用ptrace(),以 PTRACE_TRACEME 为参数表明同意被 traced,当子进程执行后会进入暂停状态,把控制权转给它的父进程(SIG_CHLD信号)。 而父进程在fork()之后,调用 wait() 等子进程停下来,当 wait() 返回后,父进程就可以去查看子进程的寄存器包括系统调用使用的寄存器,从而追踪子进程的运行过程。

3、要求

实现父进程对子进程所使用的所有系统调用的追踪

4、实现代码

ptrace.c

#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/user.h>
#include <sys/syscall.h>   
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>

typedef struct{
        //根据系统调用号获取系统调用的符号名
    long code;
    char *sysCallName;
}SysCallTable;

SysCallTable sysCallTable[]={
      //系统调用号和符号对应表
    {
   0, "read"},
    {
   1, "write"},
    {
   2, "open"},
    {
   3, "close"},
    {
   4, "stat"},
    {
   5, "fstat"},
    {
   6, "lstat"},
    {
   7, "poll"},
    {
   8, "lseek"},
    {
   9, "mmap"},
    {
   10, "mprotect"},
    {
   11, "munmap"},
    {
   12, "brk"},
    {
   13, "rt_sigaction"},
    {
   14, "rt_sigprocmask"},
    {
   15, "rt_sigreturn"},
    {
   16, "ioctl"},
    {
   17, "pread64"},
    {
   18, "pwrite64"},
    {
   19, "readv"},
    {
   20, "writev"},
    {
   21, "access"},
    {
   22, "pipe"},
    {
   23, "select"},
    {
   24, "sched_yield"},
    {
   25, "mremap"},
    {
   26, "msync"},
    {
   27, "mincore"},
    {
   28, "madvise"},
    {
   29, "shmget"},
    {
   30, "shmat"},
    {
   31, "shmctl"},
    {
   32, "dup"},
    {
   33, "dup2"},
    {
   34, "pause"},
    {
   35, "nanosleep"},
    {
   36, "getitimer"},
    {
   37, "alarm"},
    {
   38, "setitimer"},
    {
   39, "getpid"},
    {
   40, "sendfile"},
    {
   41, "socket"},
    {
   42, "connect"},
    {
   43, "accept"},
    {
   44, "sendto"},
    {
   45, "recvfrom"},
    {
   46, "sendmsg"},
    {
   47, "recvmsg"},
    {
   48, "shutdown"},
    {
   49, "bind"},
    {
   50, "listen"},
    {
   51, "getsockname"},
    {
   52, "getpeername"},
    {
   53, "socketpair"},
    {
   54, "setsockopt"},
    {
   55, "getsockopt"},
    {
   56, "clone"},
    {
   57, "fork"},
    {
   58, "vfork"},
    {
   59, "execve"},
    {
   60, "exit"},
    {
   61, "wait4"},
    {
   62, "kill"},
    {
   63, "uname"},
    {
   64, "semget"},
    {
   65, "semop"},
    {
   66, "semctl"},
    {
   67, "shmdt"},
    {
   68, "msgget"},
    {
   69, "msgsnd"},
    {
   70, "msgrcv"},
    {
   71, "msgctl"},
    {
   72, "fcntl"},
    {
   73, "flock"},
    {
   74, "fsync"},
    {
   75, "fdatasync"},
    {
   76, "truncate"},
    {
   77, "ftruncate"},
    {
   78, "getdents"},
    {
   79, "getcwd"},
    {
   80, "chdir"},
    {
   81, "fchdir"},
    {
   82, "rename"},
    {
   83, "mkdir"},
    {
   84, "rmdir"},
    {
   85, "creat"},
    {
   86, "link"},
    {
   87, "unlink"},
    {
   88, "symlink"},
    {
   89, "readlink"},
    {
   90, "chmod"},
    {
   91, "fchmod"},
    {
   92, "chown"},
    {
   93, "fchown"},
    {
   94, "lchown"},
    {
   95, "umask"},
    {
   96, "gettimeofday"},
    {
   97, "getrlimit"},
    {
   98, "getrusage"},
    {
   99, "sysinfo"},
    {
   100, "times"},
    {
   101, "ptrace"},
    {
   102, "getuid"},
    {
   103, "syslog"},
    {
   104, "getgid"},
    {
   105, "setuid"},
    {
   106, "setgid"},
    {
   107, "geteuid"},
    {
   108, "getegid"},
    {
   109, "setpgid"},
    {
   110, "getppid"},
    {
   111, "getpgrp"},
    {
   112, "setsid"},
    {
   113, "setreuid"},
    {
   114, "setregid"},
    {
   115, "getgroups"},
    {
   116, "setgroups"},
    {
   117, "setresuid"},
    {
   118, "getresuid"},
    {
   119, "setresgid"},
    {
   120, "getresgid"},
    {
   121, "getpgid"},
    {
   122, "setfsuid"},
    {
   123, "setfsgid"},
    {
   124, "getsid"},
    {
   125, "capget"},
    {
   126, "capset"},
    {
   127, "rt_sigpending"},
    {
   128, "rt_sigtimedwait"},
    {
   129, "rt_sigqueueinfo"},
    {
   130, "rt_sigsuspend"},
    {
   131, "sigaltstack"},
    {
   132, "utime"},
    {
   133, "mknod"},
    {
   134, "uselib"},
    {
   135, "personality"},
    {
   136, "ustat"},
    {
   137, "statfs"},
    {
   138, "fstatfs"},
    {
   139, "sysfs"},
    {
   140, "getpriority"},
    {
   141, "setpriority"},
    {
   142, "sched_setparam"},
    {
   143, "sched_getparam"},
    {
   144, "sched_setscheduler"},
    {
   145, "sched_getscheduler"},
    {
   146, "sched_get_priority_max"},
    {
   147, "sched_get_priority_min"},
    {
   148, "sched_rr_get_interval"},
    {
   149, "mlock"},
    {
   150, "munlock"},
    {
   151, "mlockall"},
    {
   152, "munlockall"},
    {
   153, "vhangup"},
    {
   154, "modify_ldt"},
    {
   155, "pivot_root"},
    {
   156, "_sysctl"},
    {
   157, "prctl"},
    {
   158, "arch_prctl"},
    {
   159, "adjtimex"},
    {
   160, "setrlimit"},
    {
   161, "chroot"},
    {
   162, "sync"},
    {
   163, "acct"},
    {
   164, "settimeofday"
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BUPT操作系统课设是北京邮电大学计算机科学与技术专业的一门课程,旨在让学生掌握操作系统的基本原理和设计方法。该课程通常是以小组合作的方式完成,学生需要通过实践来深入理解和运用所学知识。 课设的内容一般包括以下几个方面:首先是理解和实现一个简单的操作系统内核。学生需要掌握中断、进程管理、内存管理、文件系统等操作系统基本概念,并能够将其运用到具体的实践中。其次,需要独立或合作完成一个项目,例如设计一个简单的文件系统、实现一个多道程序设计模拟器等。这个过程需要学生理解操作系统的工作原理,考虑系统性能、安全性等因素,并进行合理的设计和实现。最后,学生需要进行一定的实验和测试,确保操作系统的正确性和稳定性。 完成BUPT操作系统课设需要学生具备一定的编程能力和动手实践能力。除了理解操作系统的基本原理外,学生还需要具备良好的团队合作能力,能够与队友有效沟通和协作。因为操作系统课设是一个相对较复杂的项目,往往需要多个学期才能完成,所以学生需要有足够的耐心和恒心。 总的来说,BUPT操作系统课设是一个重要的实践环节,可以帮助学生将所学理论知识应用到实际项目中。通过这个课设,学生可以加深对操作系统原理的理解,提高编程能力和实践能力,为将来的工作或进一步深入学习打下坚实基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值