2019-举例跟踪分析Linux内核5.0系统调用处理过程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了2019-举例跟踪分析Linux内核5.0系统调用处理过程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2021字,纯文字阅读大概需要3分钟。
内容图文
![2019-举例跟踪分析Linux内核5.0系统调用处理过程](/upload/InfoBanner/zyjiaocheng/974/bf230a3ca8c9406a9970e789177eae2c.jpg)
简介
学号520 实验环境基于ubuntu18.04
选择系统调用号20 getpid()分析
实验目的
- 学会使用gdb工具跟踪linux内核函数调用
- 学会使用C代码和嵌入式汇编使用系统中断
- 分析system_call中断处理过程
实验步骤
1.下载linux5.0.1内核并编译
- wget https://mirrors.aliyun.com/linux-kernel/v5.x/linux-5.0.1.tar.xz
- xz -d linux-5.0.1.tar.xz
- tar -xvf linux-5.0.1.tar
安装缺少的包
- sudo apt install make
- sudo apt install gcc
- sudo apt install make-guile
- sudo apt install libssl-dev
- sudo apt-get install bison
- sudo apt-get install libncurses-dev
- sudo apt-get install flex
配置
- make mrproper
- sudo make menuconfig
编译启动映像
- sudo make bzImage -j4(四线程)
2.制作根文件系统
先安装 sudo apt install gcc-4.8 gcc-4.8-multilib g++-4.8 g++-4.8-multilib
- cd ~/LinuxKernel/
- 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
3.启动Menu
- qemu-system-x86_64 -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img
4. 跟踪调试内核启动
使用gdb断点
qemu-system-x86_64?-kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img -S -s -append nokaslr
5.选择系统调用号20的系统调用进行跟踪分析
API和系统调用不是一个含义,API是应用编程接口,只是一个函数定义。而系统调用通过软中断(trap)向内核发出一个明确的请求。
API的作用是触发一个系统调用,这样系程序员只需要调用API,而不用触发中断,传递调用号等过程。
每个系统调用对应一个封装例程,库(Libc)引用这些封装例程定义出给用户的API。
所以一个API可能对应0~n个系统调用
在test.c中增加函数GetPID
1 #include <stdio.h> 2 #include <unistd.h> 3 int GetPID() 4 { 5 pid_t t,asm_t; 6 t =getpid(); 7 printf("pid = %d\n",t); 8 asm volatile( 9 "mov $0x14,%%eax\n\t" 10 "int $0x80\n\t" 11 "mov %%eax,%0\n\t" 12 :"=m"(asm_t) 13 ); 14 printf("asm_t = %d\n",asm_t); 15 return 0; 16 }
从实验中我们可以发现
通过eax传递系统调用号,然后由system_call交给system_service完成工作;system_service完成工作后,结果又由eax传递给用户态堆栈。
内容总结
以上是互联网集市为您收集整理的2019-举例跟踪分析Linux内核5.0系统调用处理过程全部内容,希望文章能够帮你解决2019-举例跟踪分析Linux内核5.0系统调用处理过程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。