博客
关于我
Linux系统调用分析
阅读量:790 次
发布时间:2023-02-05

本文共 1644 字,大约阅读时间需要 5 分钟。

学号372:内核调试与系统调用分析

实验环境

本次实验基于以下工具和平台完成:

  • 运行环境:Ubuntu 18.04 LTS(VMware虚拟机)
  • 模拟器:QEMU(用于运行32位内核)
  • 调试工具:GDB(断点调试)
  • 开发工具:Make、gcc、tar、xz等基础编译工具

实验过程

1. 内核编译

  • 从源码仓库下载内核源码(例如5.0.1版本):

    xz -d linux-5.0.1.tar.xztar -xvf linux-5.0.1.tarcd linux-5.0.1
  • 安装编译所需依赖工具:

    sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev

    如果出现依赖错误,逐一安装缺失的工具,如:

    sudo apt install libssl-dev
  • 生成32位内核配置并编译:

    make i386_defconfigmake menuconfig

    在“Kernel hacking”选项中启用调试信息选项。

  • 编译完成后,进入内核目录并生成镜像文件:

    make -j4
  • 2. 制作镜像文件

  • 创建rootfs文件系统:

    mkdir rootfs
  • 克隆并编译用户空间程序:

    git clone https://.../menu.ccd menugcc -m32 -o init linktable.c menu.c test.c -staticcd ../rootfs
  • 生成镜像文件:

    find . | cpio -o -H newc | gzip -9 > rootfs.img
  • 3. 虚拟机加载内核

  • 安装并配置QEMU:

    sudo apt install qemusudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu
  • 启动内核并测试:

    qemu -kernel linux-5.0.1/arch/x86/boot/bzImage
  • 4. 构造MenuOS

  • 克隆并编译用户空间程序:

    git clone https://.../menu.ccd menugcc -m32 -o init linktable.c menu.c test.c -staticcd ../rootfs
  • 生成镜像文件并启动:

    find . | cpio -o -H newc | gzip -9 > rootfs.imgqemu arch/x86/boot/bzImage -initrd rootfs.img
  • 测试用例

    本次实验以172号系统调用(prctl())为测试目标,编写一个用户空间程序:

    #include 
    #include
    #include
    void* tmain(void* arg) { char name[32]; prctl(PR_SET_NAME, (unsigned long)"xx"); prctl(PR_GET_NAME, (unsigned long)name); printf("%s\n", name);}int main(void) { pthread_t tid; pthread_create(&tid, NULL, tmain, NULL); pthread_join(&tid, NULL); return 0;}

    实验总结

    在本次实验中,重点分析了系统调用机制。通过调试发现,用户程序调用系统调用时,CPU切换至内核态,内核通过int 0x80触发中断处理,根据中断门号找到对应的内核函数执行。实验过程中,通过GDB设置断点,观察了系统调用过程中的寄存器状态变化,进一步理解了系统调用的工作机制。

    通过本次实验,掌握了如何在QEMU环境下调试内核,并深入理解了系统调用与中断处理的关系。

    转载地址:http://rokfk.baihongyu.com/

    你可能感兴趣的文章
    Linux常见操作命令整理
    查看>>
    Linux平台安装mongoDB、配置及端口开启
    查看>>
    linux库列表
    查看>>
    linux开启nscd服务缓存加速-DNS缓存
    查看>>
    Linux开放的端口太多了?教你一招找出所有开放的端口,然后直接干掉!
    查看>>
    Linux开机启动、利用crontab实现开机启动某个程序
    查看>>
    linux开机启动脚本制作
    查看>>
    Linux性能优化思路和方法
    查看>>
    linux打印函数是哪个文件夹,如何从linux上的文件夹中找到一个函数
    查看>>
    Linux授予权限命令
    查看>>
    Linux搭建DHCP服务
    查看>>
    Linux搭建FTP服务(附FTP Server 服务器客户端工具)
    查看>>
    Linux搭建HTTP服务
    查看>>
    Linux搭建NFS服务器
    查看>>
    Linux搭建NTP服务器
    查看>>
    Linux搭建SFTP服务器
    查看>>
    Linux操作系统安装与gcc和内核升级
    查看>>
    Linux文件内容查询命令
    查看>>
    linux文件属性
    查看>>
    Linux文件打包压缩、解压缩、备份命令使用方法
    查看>>