内核符号表和系统调用

内核符号表的生成和查找过程 Linux内核中的函数名、全局变量等,都保存在一个全局的符号表中,本文介绍内核符号表的生成及查找过程。 阅读详情

转自:http://bbs.ednchina.com/BLOG_ARTICLE_62710.HTM

驱动程序开发过程中涉及kernel symbol table 和syscall两个概念,不知道大家是如何理解的,在此把我对二者理解罗列如下,给大家参考:


    内核符号表是linux内核提供给内核代码的一部分引用,所指的“内核代码”包括内核以及驱动程序等运行在内核内存空间的程序,“引用”包括对变量的引用,对函数的引用等。最常见的内核符号引用如printk打印输出。通常内核符号是由一部分内核代码提供给其他内核代码访问其内部数据的接口。在驱动程序中,如果该驱动程序中有被其他内核代码调用的部分,可以用EXPORT_SYMBOL导出到内核符号表中。


    在多层驱动模型如USB、SCSI、文件系统中一般底层的驱动程序要导出其功能调用到内核符号表中,给上层驱动调用。


    系统调用是由基本内核提供的功能调用接口,所指的基本内核是不包括驱动程序,不能被随意精简的核代码。系统调用的接口不仅运行于内核空间的代码可以调用,用户空间的程序同样可以使用系统调用。系统调用的最初目的就是提供给用户程序访问操作系统的接口。最常见的系统调用如open,close,read,write等。


    用户应用程序使用open(“/dev/null”)打开设备时,到底该系统调用完成了什么功能?简单的说,应用程序通知操作系统,需要打开/dev/null设备,成功后操作系统会返回设备句柄。至于操作系统为了完成打开设备操作具体干了写什么,可以参考内核代码中sys_open的实现。


    内核符号表中的东西只能被内核空间程序访问,系统调用无此限制。系统调用是最基本内核提供的代码不能随意添加或减少,而内核符号可以根据需要自行导出。


    还有一点值得注意的是,当在内核代码中如驱动程序,发生了系统调用,系统调用的代码是在该进程的用户空间运行。这样说还是有点模糊,举个例子就清楚了。


进程test,虚拟设备/dev/readfile驱动程序模块readfile.o,文件name.txt这三个对象。


Test.c中:


   Open(“/devreadfile”。。。) /*系统调用open,打开设备/dev/readfile*/


在readfile.c的驱动程序中:


   open(“name.txt”。。。)   /*系统调用open,打开文件name.txt */


把前一个open命名位OPEN1,后一个为OPEN2。OPEN1系统调用运行于test进程的内存区,readfile.o的模块代码运行于内核空间,当发生系统调用OPEN2时,OPEN2其实也是运行于进程test的内存区。Test内存区是用户空间,这点十分重要。不推荐在驱动代码中使用系统调用,以防止死锁。


 


系统调用不到300个,在/arch/i386/kernel/entry.S文件中定义,去掉前面的sys_

第五节_PySide6基本窗口控件_主窗口和标签 本文介绍了PySide6中主窗口和标签控件的使用。主要内容包括: 窗口控件分类: QWidget是基础窗口部件,可作为独立窗口或子部件 QMainWindow提供标准应用程序框架,包含菜单栏、工具栏等 QDialog用于对话框,支持模态交互 主窗口创建: 演示了如何创建QMainWindow子类 实现了窗口居中、设置图标、状态栏等功能 提供了窗口几何信息的获取方法 QLabel标签控件: 继承自QFrame类 用于显示文本或图像 文章通过代码示例详细说明了主窗口的创建和使用方法,包括位置控制、图标设置等常见 阅读详情

相关推荐

海康工业相机排雷笔记02-像素格式解析

工业相机使用过程记录 02-像素格式解析 通过将相机输出图像裸数据raw格式直接存图查看 一、黑白/Mono 直接使用相机测试图像存图: 图像中各部分灰度分别为:0、36、73、109、146、182、219、255,以灰度73列为例 (1)Mono 8 该列图像数据为十六进制49,十进制为73,那么Mono 8就是每个像素点占8bit,依次排列。 (2)Mono 10 该列图像数据为十六进制2401,由于相机均为小端数据,实际数据应解析为0124,十进制为292=73*4,那么Mono 10格式为每

yonghuming_66的博客 8357

内核符号表详解

关键词:Kernel Symbol Table、/proc/ksyms、system.map、Oops、LKM这应该是一个很基本的内核概念,和模块、系统调用等一样基础,但牵涉的东西却一点也不窄,一毫也不浅。(但也不深:-)【内核符号表,kernel symbol table】Linux的内核是个单内核monolithic,任一函数都可以访问公共数据结构和函数调用。在设计程序时,需要命名一些函数名、

千里冰封 2125

语言随机效应模型_线性混合效应模型 VS 方差分析

线性混合效应模型相比方差分析具有很多优点。为了让大家更直观的了解,我们来做一下两者的对比。基于模拟的方法,生成了以下数据dat_sim:这种数据格式是长格式,也就是从实验软件导出来的那种数据格式。这种数据格式可以直接使用线性混合效应模型进行分析。该实验设计是被试内项目间的单因素两水平设计。category是自变量,两个水平分别是outgroup和ingroup,outgroup比ingr...

weixin_31960565的博客 2688

内核符号表

linux设备驱动程序(第三版) 第二章 构造和运行模块 内核符号表        我们已经知道insmod如何通过公共的内核符号表来解析未定义的符号。公共内核符号表包含了全局内核项—函数和变量—的地址,在实现模块驱动程序时,需要用到这个地址。当加载一个模块的时候,这个模块所导出的任何符号都成为内核符号表的一部分。通常情况下,一个模块在实现自身功能的时候,不需要导出任何符号。但是,在任何时候

Howie的专栏 650

Aix升级和安装ssh配置过程

Aix升级和安装ssh配置过程Aix升级和安装ssh配置过程配置前背景配置步骤 Aix升级和安装ssh配置过程 部门IBM小型机的Aix操作系统需要进行ssh补丁修复,修复其实就是ssh版本你的升级,对升级的过程和中途遇到的问题做了记录如下。 配置前背景 操作系统: gdboss2/>uname -u //操作系统的Aix5.3 IBM,020693E5P gdboss2/&gt...

阿阿阿唱的博客 2990

[漏洞剖析]JeecgBoot queryFieldBySql注入与JDBC连接滥用:从内存马植入到RCE的完整攻击链

本文深度剖析了JeecgBoot框架中queryFieldBySql接口的SQL注入漏洞及其引发的完整攻击链。攻击者利用该漏洞,通过Freemarker SSTI植入隐蔽的内存马,并进一步滥用JDBC连接测试功能,借助H2数据库特性实现远程命令执行(RCE),揭示了低代码平台中功能滥用与安全配置疏忽带来的严重风险。

weixin_29232121的博客 115

开启内核符号表信息保护

1.使用cat/proc/sys/kernel/kptr_restrict命令查看配置文件值。

2401_87952483的博客 547

MTK6769平台Type-C充电全解析:从硬件管脚到PD协议实战(Android15环境)

本文深入解析了MTK6769平台在Android 15环境下Type-C充电的完整链路。从硬件管脚(特别是核心的CC引脚)功能与连接,到USB-PD协议报文抓取与实战分析,并结合MTK平台PD芯片驱动与充电IC驱动的软件框架,提供了从硬件设计到软件调试的系统性解决方案和常见问题排查案例。

ol78901234的博客 311

内核系统调用openat Hook(Android10)

以下操作基于安卓10系统lineageOs 17.1源码研究,手机型号oneplus3 镜像研究测试。 一、安卓内核模块开发编译 安卓系统如何开发内核可加载模块参考以下文章:"安卓10源码学习开发定制(11)内核篇之安卓内核可加载模块开发编译" 二、内核系统调用hook原理 内核系统调用hook主要是在内核模块加载的时候,通过修改替换内核系统调用表sys_call_table的系统调用号地址来实现目的。 三、内核源码默认配置修改支持系统调用挂钩功能 为了通过insm...

哆啦安全 2194

使用TinyProxy搭建代理服务器

背景 办公电脑所在网络无法连接外网,机房服务器可以连接外网,通过服务器代理上网; 一、CentOS下TinyProxy安装–搭建代理服务器 TinyProxy是个轻量级简单的HTTP/HTTPS代理程序,GitHub和官网,安装方式这里主要介绍两种 CentOS下yum安装,参考:TinyProxy安装 Docker安装 先安装docker环境yum install docker -y 二、Win10下使用 ...

椰汁菠萝 1万+

YOLOv11【第六章:模型压缩与极致优化篇·第15节】YOLOv11 专用剪枝工具库使用指南!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 1312

Linux可加载内核模块(LKM)(转载)

转载:漏天剑文章导航: 为校长杯流尽最后一滴血, Lkm注射, 返回首页 Linux可加载内核模块(LKM)Linux可加载内核模块完全版--黑客、病毒程序编写者和系统管理员的概念性指南作者:pragmatic/THC版本:1.0发布时间:03/1999/译者:spark.bbs@bbs.nankai.edu.cn I.基础知识1.什么是LK

robinshaw的专栏 5886

Trae的付费之路还挺艰难,茫茫多的人想付付不了(附解决办法)

不得不说,Trae国际版这个付费其实整的挺复杂的,但没办法,毕竟有政策限制,付费成功后,你就是尊贵的Pro用户啦,使用Claude 4不排队还是挺爽的,而且600次其实不算少了,有一个小技巧,简单的问题就把模型切到Gemini-2.5-flag,因为使用这个模型是没有次数限制的。其次付费的时候有个ZIP Code,这东西也是个迷之存在,有的地区节点需要填,有的不需要,如果你选到了不需要填的节点,那很好,付费就行了,如果需要填,可以填一个51800试试。

cpp加油站的专栏 5879

rootkit for linux 11.“寻找入口点”的改进方法

昨天看了篇文章《Linux on-the-fly kernel patching without LKM 》作者提供了一种 ring3 进 ring0 的方法,思路很不错。我们也可以用那篇文章里提供的方法进入 ring0。我们现在用的是溢出,溢出的通用性差,但只需要普通用户权限即可。作者的方法通用性好,但需要root权限。 第2篇文章“寻找入口点”用的是系统调用读/proc/k

varg_vikernes的专栏 876

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

linux内核符号表

这应该是一个很基本的内核概念,和模块、系统调用等一样基础,但牵涉的东西却一点也不窄,一毫也不浅。(但也不深:-) 【内核符号表,kernel symbol table】 Linux的内核是个单内核monolithic,任一函数都可以访问公共数据结构和函数调用。在设计程

zifei123的专栏 4301

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

内核调试和系统调用劫持

如何在不重新编译内核,不rmmod内核模块的情况下修改系统调用 为了解决这个问题,最终实现了两种解决方式: 1.Linux系统调用劫持 2.Kprobes内核调试技术(并非真正的修改) 下面分别说下: Linux系统调用劫持: 其实就是修改内核符号表,来达到一个劫持的作用。因为系统调用实际上是触发了一个0x80的软中断,然后转到了系统调用处理程序的入口system_call()。system_call()会检查系统调用号来得出到底是调用哪种服务,然后会根据内核符号表跳转到所需要调用的..

caotuo_csdn的博客 502

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

内核符号表问题

问题描述   有两个模块,mod1和mod2。 在mod1中定义了func()函数,并且经EXPORT_SYMBOL()导出。 在mod2中extern func(),调用func()。   编译模块mod2,成功。 加载mod2时,输出: insmod: error inserting 'mod2.ko': -1 Invalid parameter

如丧 660

Windows内核符号表下载

在进行Windows Driver开发调试中,内核符号表是个问题。由于网络不稳定,利用windbg下载不了,在WDK的documentation中查找到下载然后本地运用的地址,贴上来:http://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx 在里面选择所需要调试系统版本的内核符号表,下载即可。 附上原有的方法:将 sr

taobao755624068的专栏 1万+

kallsyms 压缩_内核符号表和kallsyms

1 内核符号表(kernel symbol table)作用变量名或者函数名组成,每一项是符号和地址的序对,就像域名和ip地址,格式如下:[root@rx6600 boot]# head System.map000000000479c4a0 A phys_starta000000000000600 A __start_gate_mckinley_e9_patchlista0000000000006...

weixin_28716217的博客 401

linux的内核符号表

比如,内核中的一个函数 do_something() ,在内核符号表中就会有一条记录,记录着 do_something() 这个符号以及它在内存中的具体地址。驱动程序开发人员在调试驱动时,通过内核符号表,可以更清晰地了解驱动与内核交互过程中出现的问题,比如函数调用顺序错误、参数传递错误等。- 性能分析:在对内核进行性能分析时,工具可以利用内核符号表将性能数据(如函数执行时间、调用次数等)与具体的内核函数关联起来,从而帮助开发人员找出性能瓶颈所在的函数,以便进行针对性的优化。

sinat_31608641的博客 511

内核符号表简介

System.map是内核符号表文件,是由“nm vmlinux”命令产生的。

wuzoujing的专栏 725

Linux内核符号表

一,什么是符号(Symbols)?    什么是Symbol?  其实就是kernel中的变量(Variable Name)或函数名称(Function Name),  ...

Linux知识积累 1628

关于内核符号表

关于内核符号表 http://soft-app.iteye.com/blog/920312 在编写驱动的过程中,常会使用到EXPORT_SYMBOL宏来将定义的函数名导出到内核符号表。以前只是简单的知道如果一个模块中定义的函数要提供给其他模块调用,就必须进行导出。这段时间在编译单个模块的时候,因为没编译成功造成了函数没定义而报警的情况,因此让我有一个机会对内核符号表的

anhkgg的专栏 609
上一篇: 静态库和动态库
下一篇: 定制centos6.0
worldlight
博客等级 码龄15年 28粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值