Linux5.0内核的启动过程, 跟踪分析Linux内核的启动过程

学号后三位:426。原创作品转来自: https://github.com/mengning/linuxkernel/ ”

  举例跟踪分析Linux内核5.0系统调用处理过程

    • 编译内核5.0
    • qemu -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img
    • 选择系统调用号后两位与您的学号后两位相同的系统调用进行跟踪分析
      https://github.com/mengning/menu
    • 给出相关关键源代码及实验截图,撰写一篇博客(署真实姓名或学号最后3位编号),并在博客文章中注明“原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ ”,博客内容的具体要求如下:
      • 题目自拟,内容围绕系统调用进行;
      • 博客中需要使用实验截图
      • 博客内容中需要仔细分析系统调用、保护现场与恢复现场、系统调用号及参数传递过程
      • 总结部分需要阐明自己对系统调用工作机制的理解。

        实验环境

    • Ubuntu 16.04
    • gcc

实验步骤:

1.下载内核5.0.2版本   下载menuOS

wget wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.2tar.xz

xz -d linux-5.0.2.tar.xz

tar -xvf linux-5.0.2.tar 

git clone https://github.com/mengning/menu.git

 

安装内核编译⼯工具  

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

cd linux-5.0.2 
配置编译内核
make i386_defconfig #⽣生成32位x86的配置⽂文件
make menuconfig #开启⽂文本菜单选项,对窗⼝口有限制,尽量量调⼤大窗口找到kernel hacking,->Compile-time checks and compiler options,选择 [*]compile the kernel with debug info 保存退出
make -j8 可以让编译的速度快很多
然后切换到Menu目录
cd ../menu 
修改Makefile文件
将内核改为自己对应的内核版本
然后编译make rootfs 生成一个镜像文件 rootfs.img
qemu -system-i386 -kernel arch/x86/boot/bzImage -initrd rootfs.img 启动镜像文件
 
跟踪调试内核启动

qemu-system-i386 -kernel linux-5.0.2/arch/x86/boot/bzImage -initrd rootfs.img -S -s -append nokaslr

开启一个新的终端

cd linuxkernel/linux-5.0.2

gdb

(gdb)vmlinux

(gdb) target remote:1234

我的学号后两位是26。对应的系统调用函数是:Ptrace  vim /usr/include/asm/unistd_32.h

 

系统调用的触发及参数传递

  • 当调用一个系统调用时,CPU从用户态切换到内核态并开始执行一个system_call和系统调用内核函数。在Linux中通过执行int 0x80来触发系统调用,内核为每个系统调用分配一个系统调用号,用户态进程必须明确指明系统调用号,需要使用EAX寄存器来传递。
  • 系统调用可能需要参数,但是不能通过像用户态进程函数中将参数压栈的方式传递,因为用户态和内核态有不同的堆栈,必须通过寄存器的方式传递参数。
  • 概括:EAX用来传递系统调用号,EBX、ECX、EDX、ESI、EDI、EBP用来传递参数,若参数较多,则把指向内存的指针存入寄存器。

 

 

转载于:https://www.cnblogs.com/matrin/p/10560043.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值