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

博客介绍了Linux内核编译过程,包括解压5.0.1内核、配置编译信息、编辑启动镜像、制作文件系统等。还提及选择02号系统调用号进行跟踪分析,指出系统在用户态和内核态间切换,中断调用有三层,通过系统调用号确定调用服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

202号

一,编译内核

  解压5.0.1内核到当前目录下,并进入到文件内,对编译信息进行配置

  sudo apt install bison flex libssl-dev gcc-multilib

wget https://github.com/mengning/linux/archive/v5.0.1.tar.gz
xz -d linux-5.0.1.tar.xz
tar -xvf linux-5.0.1.tar
cd linux-5.0.1

  make menuconfig

 

  sudo apt-get install libncurses5-dev libncursesw5-dev

  make menuconfig

编辑启动镜像

sudo make gzImage -j4

制作文件系统

cd ..
mkdir rootfs
git clone https://github.com/mengning/menu.git
cd menu
gcc -pthread -o init linktable.c menu.c test.c -m32 -static
cd ../rootfs
cp ../menu/init ./
find . | cpio -o -Hnewc | gzip -9 > ../rootfs.img

 

 启动menu

qemu-system-x86_64 -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img

选择02号系统调用号进行跟踪分析

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h><br><br>void sig_fork() {<br>  exit(0);<br>}
int Fork_test(int argc, char *argv[]) {
  signal(SIGALRM, sig_fork);<br>  fork(10);<br>   return  0;
}
int main()
{
     PrintMenuOS();
     SetPrompt( "MenuOS>>" );
     MenuConfig( "version" , "MenuOS V1.0(Based on Linux 3.18.6)" ,NULL);
     MenuConfig( "quit" , "Quit from MenuOS" ,Quit);
     MenuConfig( "time" , "Show System Time" ,Time);
     MenuConfig( "time-asm" , "Show System Time(asm)" ,TimeAsm);
     MenuConfig( "alarm" , "Show alarm" ,Fork_test);
     ExecuteMenu();
}

 

 02  eax的是0x1c 

 

系统在用户态和内核态之间进行切换。中断调用共有三层,分别是API,system_call, system_service

通过制定系统调用号,使系统能够确定需要调用的服务。我们运行的函数在用户态而系统调用运行于内核态

转载于:https://www.cnblogs.com/lubaobao/p/10562065.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值