跟踪分析Linux内核5.0系统调用处理过程
2019-03-19 22:48 中华民族族草 阅读(241) 评论(0) 收藏 举报202号
- 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/
一,编译内核
解压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
通过制定系统调用号,使系统能够确定需要调用的服务。我们运行的函数在用户态而系统调用运行于内核态
浙公网安备 33010602011771号