举例gdb,Linux跟踪分析系统调用

举例gdb,Linux跟踪分析系统调用

学号143  原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/

前言

该博客基于《Linux系统分析》课程的实验,实验要求举例跟踪分析Linux内核5.0系统调用处理过程

1.编译5.0内核

2.选择系统调用号后两位与您的学号后两位相同的系统调用进行跟踪分析

Linux 5.0内核代码链接 https://github.com/mengning/linux/tree/v5.0

一、实验环境:基于VMware,Ubuntu14.04,qume模拟器,Linux5.0内核

环境搭建

下载Linux内核源代码

在源代码压缩包的目录下执行以下命令

xz -d linux-5.0.1.tar.xz
tar -xvf linux-5.0.1.tar
cd linux-5.0.1

安装内核编译工具

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

配置编译内核

生成配置文件,以下选其一就好,make defconfig是缺省编译,只是包含部分核心功能,生成可能导致图形界面不能使用

make defconfig #按照默认值生成.config
make i386_defconfig #生成32位x86的配置⽂文件
make config           #遍历选择编译内核功能
make allyesconfig     #启用内核全部功能
make allnoconfig      #内核功能选项全部为否
make menuconfig #开启⽂文本菜单选项,对窗⼝口有限制,尽量量调⼤大窗⼝口

 使用make i386_defconfig报错,需要安装必要的依赖flex和bison

sudo apt-get install flex
sudo apt-get install bison

使用make或make -j*编译内核 ,*表示为cpu核心数,可以加快编译速度

make完成之后如下图所示

之后执行以下代码

mkdir rootfs
git clone https://github.com/mengning/menu.git  
cd menu
gcc -o init linktable.c menu.c test.c -m32 -static –pthread

若是没有安装git还需要先执行

sudo apt-get install git

安装qemu 并 加载内核

sudo apt-get install qemu
qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img

 弹出以下窗口

再执行make命令(据说要)

到这里我们可以开始做跟踪实验了

二、跟踪13号系统调用,该系统调用是__NR_times,即times()函数

原 型:time_t time(time_t * timer)

  功 能: 获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒。

编写143.c文件,将时间转换成字符串时间打印出来

 将143.c进行编译

 启动两个终端一个运行下列代码

qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img -s -S
# -S freeze CPU at startup (use ’c’ to start execution)
# -s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

另一个执行gdb进行调试 

gdb命令:

file 设置跟踪文件

b:设置断点

r:执行到断点

ni:单步执行

disass:显示汇编代码

info r:跟踪寄存器变化,显示寄存器内容

汇编代码如下所示 ,在前几行是寄存器初始化,ebx保存基址,在第五行mov $0xd,%eax是将系统调用号保存在eax寄存器中,0xd即16进制的13,表示调用13号系统调用,进入系统调用

 

三、总结

系统调用过程

 

实验简单的了解了系统调用的基本知识,包括内核态与用户态、内核栈与用户栈以及在系统调用过程中,如何从内核态过渡到用户态等。  

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值