博客
关于我
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系统中有关/dev/null和/dev/zero文件说明及实践
    查看>>
    Linux系统中的日志文件(非常详细)零基础入门到精通,收藏这一篇就够了
    查看>>
    Linux系统中的系统盘和数据盘是什么意思?
    查看>>
    Linux系统中的默认安装目录 - 不能随意更改名字
    查看>>
    Linux系统中进程运行时间的五大精准检测法
    查看>>
    Linux系统中,shell脚本的异步执行
    查看>>
    Linux系统之工具篇(一)DRBD 单双主模式区别详解,Centos6.5(64bit)与nfs文件系统使用结合测试...
    查看>>
    Linux系统之软件管理:Ubuntu彻底删除软件及配置文件
    查看>>
    Linux系统信息查看命令
    查看>>
    Linux系统具体硬件型号查看与系统故障定位分析
    查看>>
    Linux系统初始化命令的备忘单,Linux运维工程师收藏!
    查看>>
    Linux系统启动流程
    查看>>
    Linux系统命令简单介绍
    查看>>
    Linux系统在线安装anaconda(Centos)
    查看>>
    Linux系统基本网络配置之ifconfig命令
    查看>>
    Linux系统基础-管理之加密、解密、Openssl基本应用及CA实现过程
    查看>>
    Linux系统大量的TIME_WAIT、CLOSE_WAIT连接问题解决
    查看>>
    linux系统如何实现内网穿透、外网访问
    查看>>
    linux系统如何实现内网穿透、外网访问
    查看>>
    Linux系统如何显示系统内存使用情况,free命令来了!
    查看>>