Linux系统调用跟踪分析

跟踪分析Linux内核5.0系统调用处理过程 - 1 #define __NR_pipe 42 阅读详情

林弋力
224
原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/

实验目的

选择系统调用进行分析
理解系统调用工作机制

实验步骤

下载并编译内核

wget wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.2tar.xz

xz -d linux-5.0.2.tar.xz

tar -xvf linux-5.0.2.tar 

git clone https://github.com/mengning/menu.git

安装编译工具

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

配置内核

cd linux-5.0.2
make i386_defconfig
make menuconfig
make -j 8

在这里插入图片描述

cd ../menu

进入Menu目录,修改Makefile文件
将内核版本改为对应的版本
编译make rootfs 生成一个镜像文件 rootfs.img
启动该镜像

qemu-system-i386 -kernel arch/x86/boot/bzImage -initrd rootfs.img

在这里插入图片描述

跟踪系统调用分析

qemu-system-i386 -kernel linux-5.0.2/arch/x86/boot/bzImage -initrd rootfs.img -S -s -append nokaslr
cd linuxkernel/linux-5.0.2

gdb

(gdb)vmlinux

(gdb) target remote:1234

在这里插入图片描述
跟踪分析的系统调用为24:getuid

跟踪测试函数

//getuid.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(int argc, char const *agrv[])
{
    uid_t uid;
    uid=getuid();
    printf("The current user ID:%d\n",uid);

    return 0;
}

测试结果:
在这里插入图片描述
使用嵌入汇编的方式把系统调用展示如图:
在这里插入图片描述
可以看出,系统调用执行了内核的封装例程。
用户进程只需要把相应的调用号放入eax寄存器,内核就在内核态完成相应的计算,把用户所要求的结果返给用户进程,参与其他运算。

实验总结

当调用一个系统调用时,CPU从用户态切换到内核态并执行一个system_call和系统调用内核函数。在Linux中通过执行int 0x80来触发系统调用,内核为每个系统调用分配一个系统调用号,用户态进程必须明确指明系统调用号,并使用EAX寄存器来传递。
系统调用可能需要参数,但是不能通过像用户态进程函数中将参数压栈的方式传递,因为用户态和内核态有不同的堆栈,必须使用寄存器EBX、ECX、EDX、ESI、EDI、EBP来传递参数。若参数较多,则把指向内存的指针存入寄存器。

树莓派OS十月更新:任务栏初始化与DPI自适应重构 任务栏是Linux桌面环境中最基础却最易出错的系统组件之一,其稳定性直接依赖于窗口管理器、GTK主题链、D-Bus通信及多屏DPI适配等底层机制。传统lxpanel采用同步阻塞式初始化,在ARM架构与多屏场景下极易因openbox焦点劫持或GTK资源加载延迟而失能。本次更新通过引入lxpanel-launcher启动代理、分层配置模型与插件健康监控体系,实现了任务栏状态机的可信化升级。技术价值在于将‘手动救火’转为‘自动免疫’,显著提升热插拔、缩放切换、硬件变更等高频场景下的首显成功率与渲染一致性。尤其在树 阅读详情

相关推荐

TWR-K65F180M评估板:基于Cortex-M4的嵌入式原型开发实战指南

在嵌入式系统开发中,微控制器(MCU)是核心,而围绕其构建的硬件平台则是将想法转化为可工作原型的关键。Cortex-M4内核凭借其高效的流水线、DSP指令集和浮点单元,为实时控制与信号处理提供了强大的运算能力。其技术价值在于,能够在较低功耗下满足工业控制、物联网网关等场景对能效比的严苛要求。为了快速验证系统设计,开发者常使用成熟的评估板来规避底层硬件设计的风险,直接聚焦于应用开发。本文以恩智浦的TWR-K65F180M评估板为例,深入解析其基于**ARM Cortex-M4**内核的K65 MCU的硬件架构

weixin_33582311的博客 370

【嵌入式开发 Linux 常用命令系列 10 -- linux 必用 跟踪系统调用和信号 命令 strace 详细介绍 】

strace是一种在Linux环境下帮助程序员诊断、调试和理解程序运行的工具。通过追踪程序执行过程中的系统调用和信号传递,strace提供了一个"在运行时查看"程序的方式。strace [ 选项 ] 命令-c: 统计每一系统调用的所执行的时间,次数和出错的次数等;-d: 输出strace关于标准错误的调试信息;-f: 跟踪由fork调用所产生的子进程;如果提供,则所有进程的跟踪结果输出到相应的中,pid是各进程的进程号;-F: 尝试跟踪vfork调用。在-f时,vfork调用有些特殊;-i。

CodingCos的博客 474

牛顿法vs高斯牛顿法vs LM算法:三行代码说清核心区别(附性能对比表格)

本文通过对比牛顿法、高斯牛顿法和LM算法的核心迭代代码,揭示了三者在非线性最小二乘优化中的本质区别。LM算法通过引入阻尼因子,在高斯牛顿法的快速收敛与梯度下降的稳定性之间取得平衡,成为工程实践中鲁棒性最强的首选。文章还提供了清晰的性能对比表格,帮助开发者根据初始估计和问题性质快速选择合适算法。

weixin_29062255的博客 419

Linux 调试之strace

Linux 调试之strace的使用及其原理

小立仔 3552

从封装到先进封装:一文讲透Chiplet、2.5D/3D堆叠与系统集成

封装是芯片产业链中连接硅片与电路板的桥梁,承担物理保护、电气连接、散热与机械支撑等核心任务。传统封装从DIP、QFP发展到BGA,通过提升引脚密度满足早期性能需求。随着摩尔定律放缓,单纯缩小晶体管尺寸难以为继,先进封装应运而生,其核心理念从“封装单颗芯片”转向“系统级高密度集成”。扇出型封装、2.5D硅中介层、3D堆叠、Chiplet和系统级封装等技术,通过微米级互连和垂直堆叠,大幅提升I/O密度与带宽,成为AI芯片、HBM存储、高性能计算等领域的关键支撑。本文梳理先进封装的技术演进、分层架构与工程难点,帮

weixin_29185167的博客 367

算法面经手撕系列(2)--手撕BatchNormlization

手动实现/手撕BatchNormlization

罟霖同学的站点 867

Linux应用调试之使用strace命令跟踪系统调用

Linux应用调试之使用strace命令跟踪系统调用

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 1427

100kHz手持LCR表设计:高频阻抗测量与校准实战解析

阻抗测量是电子元件测试的基础,LCR表通过施加正弦激励并分析电压电流的幅值与相位,即可获取电容、电感、电阻的等效参数。在开关电源、无线充电等高频应用场景中,元件在100kHz下的ESR和阻抗特性尤为关键,传统10kHz手持仪表难以满足需求。本文从自动平衡桥原理出发,探讨如何将台式电桥的核心能力浓缩至手持设备,重点剖析高频寄生参数抑制、模拟链路设计、数字相敏检波算法及开路短路校准方法。通过实测数据验证,在100kHz频率下基本精度可达0.5%以内,为维修现场、产线抽检及硬件调试提供了可携带的精密测量方案。全文

weixin_33910191的博客 398

Linux: 系统调用追踪原理简析

linux,ptrace,strace,系统调用追踪

JiMoKuangXiangQu的专栏 1345

从外包到转正:一个华为OD亲历者的真实工作体验与避坑指南

本文分享了一位华为OD员工从外包到转正的真实经历与实用建议。通过详细解析华为OD的日常工作、转正核心指标、机试备考技巧及职场突围策略,为读者提供了一份全面的避坑指南。特别针对机试E卷的高频考点和刷题方法,给出了具体的数据分析和实战经验。

weixin_33686714的博客 702

FANUC机器人S523 新款PN板卡与西门子PLC通信配置介绍

FANUC机器人S523 新款PN板卡与西门子PLC通信配置介绍

Robot_PLC_HMI_Automation 354

系统调用追踪之strace

strace 是一个常用的linux命令,应该是 trace system calls的简写形式,用来追踪一个程序的系统调用。 1、启动并跟踪程序 strace ./test.exe ## 结果打印在屏幕 strace -o out.txt ./test.exe ## 结果输出在文件 strace -f -o out.txt ./test.exe ## -f...

安得情怀似旧时 983

开放平台实现安全的身份认证与授权原理与实战:使用OAuth 2.0实现授权码模式

作者:禅与计算机程序设计艺术 1.背景介绍 随着互联网应用的飞速发展,各种网站、App、小程序等都将逐渐向用户提供了丰富的功能和服务。在这些应用中,用户通常需要登录才能使用这些服务,这就涉及到用户信息的安全问题。如果用户的信息被泄露或篡改,那么可能造成严重后果。因此,为这些应用提供安全且健壮的身份验

AI天才研究院 494

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

举例跟踪分析Linux内核5.0系统调用处理过程 学号后三位029 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 1.实验目标 1.编译内核5.0 2.选择系统调用进行跟踪分析 2.实验环境 VMware Workstation Pro Ubuntu 18.04 虚拟机 3.编译内核5.0 下载linux5.0 wget htt...

weixin_41875227的博客 380

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

简介 学号520 实验环境基于ubuntu18.04 选择系统调用号20 getpid()分析 实验目的 学会使用gdb工具跟踪linux内核函数调用 学会使用C代码和嵌入式汇编使用系统中断 分析system_call中断处理过程 实验步骤 1.下载linux5.0.1内核并编译 wget https://mirrors.aliyun.com...

weixin_30821731的博客 153

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

Linux实验——跟踪分析Linux内核5.0系统调用处理过程 学号后三位为342 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 实验工具 Linux 5.0.1 内核 VMware Workstation Pro Ubuntu 18.04 实验目的 编译Linux内核5.0.1 选择系统调用号后两位与您的学号后两位相同的系...

A22B9S的博客 434

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 基于mykernel完成多进程的简单内核
下一篇: Linux进程的创建,执行与切换
夜刃 
博客等级 码龄8年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值