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 <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