`
xitong
  • 浏览: 6197682 次
文章分类
社区版块
存档分类
最新评论

linux内核中符号地址的获取

 
阅读更多

有些内核函数或者内核变量是不导出的,但是确实需要用,那该怎么办?因此寻找内核符号地址就有必要进行一下总结,更有甚,如果想找一条特定的指令,比如movl的指令地址,那更需要投入一些精力!总的来说,我总结了下面五种方式:
1.通过procfs中的kallsym文件或者System.map文件直接查找
这种方式借助于文件,依赖于文件的存在,不需要什么编程能力,只要会在文件中查找信息即可
2.google一下
这种方式借助于互联网,依赖你对信息的筛选能力。最有代表性的,寻找system_call和sys_call_table的地址,网上会说先找到0x80个中断描述符,然后在寻找机器码特征。这种方式实际上广泛用于替换系统调用这种小伎俩。
3.使用dump_stack
这种方式需要在你想得到的地址调用链条的下游调用dump_stack,然后通过dmesg信息得到相应的地址信息。同理等价的方式就是故意制造错误,迫使内核打印地址。
4.利用栈结构和栈原理寻找
记住栈中会有什么信息,一般会有参数地址信息,会有一个个的栈帧信息,每当调用call指令的时候,还会将下一条指令的地址压入栈中。通过这些信息我们可以得到大量的地址信息。
5.从/dev/mem中搜索
这个方式最有技术含量,也最困难,然而什么外界工具都不需要,甚至都不需要你懂编程语言。然而需要你对机器码指令十分精通,对内存布局十分精通,它实际上是一种机器语言的编码方式
从上述方法可以看出,从1到5,对外部工具的依赖越来越少,然而对自身的知识储备要求越来越高,因此完成一件事的成本貌似是守恒的。如果一个人的知识储备非常丰富,本身有十分聪明,他会使用哪种方式呢?会使用第五种方式吗?我想绝对不!他肯定尝试使用第一种方式,然后第二种...他很有可能永远不会使用第五种方式,虽然他有能力完成!这就是说,在解决问题的时候,我们不会在乎难度和能力,我们只在乎成本,因此我们总是喜欢从阻力最小的方向上切入,有简单的方式就不使用更复杂的方式,这也印证了简单就是美的普世原则。在力求简单的过程中,我们不得不积累更多的知识,进行更多的尝试...
想起一句广告词,加速,是为了放慢脚步!

分享到:
评论

相关推荐

    g0dA#linuxStack#定位linux内核函数地址1

    不管是导出的还是未导出的,可以通过这些方法来获取到指定函数的地址或者指定地址的函数通过内核符号名取符号地址kallsyms_lookup_name,这本身也是一

    获取Linux内核未导出符号的几种方式

    从Linux内核的2.6某个版本开始,内核引入了导出符号的机制。只有在内核中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL导出的符号才能在内核模块中直接使用。然而,内核并没有导出所有的符号。例如,在3.8.0的内核中,do_...

    linux内核 0.11版本源码 带中文注释

    // linux 初始化(仅在这个程序中被调用)。 static inline _syscall0 (int, sync) // int sync()系统调用:更新文件系统。 #include <linux/tty.h> // tty 头文件,定义了有关tty_io,串行通信方面的参数、常数...

    vmlinux-to-elf:通过提取内核符号表(kallsyms)从原始内核中恢复可完全分析的.ELF的工具

    为此,它将在内核中扫描内核符号表( ),这是几乎每个内核中都存在的压缩符号表,大多数情况下未。 因为相关的符号表最初是压缩的,所以它应该恢复原始二进制文件中不可见的字符串。 它会生成一个.ELF文件,您可以...

    drk:Linux 内核的动态检测

    DRK:DynamoRIO 作为 Linux 内核模块 ... 这种耦合源于 DRK 使用一些非导出的内核接口来查看符号并获取内核的内存布局。 通过对 kernel_linux/kernel_interface.c 的一些破解,您应该能够让 DRK 与其他内核版本一起工

    LINUX操作系统(电子教案,参考答案)

    本章主要介绍了在Linux中系统的扩充,包括软件的安装和内核的升级等内容。 第11章:系统维护与监视。本章主要介绍了Linux中的文件系统维护与监视。其中包括交换空间、/proc的信息以及各种日志文件和进程记账等。 第...

    linux设备驱动程序

    《LINUX设备驱动程序(第3版)》已针对Linux内核的2610版本彻底更新过了。内核的这个版本针对常见任务完成了合理化设计及相应的简化,如即插即用、利用sysfs文件系统和用户空间交互,以及标准总线上的多设备管理等等。...

    Linux DeviceDrivers 3rd Edition

    内核符号表 33 预备知识 35 初始化和关闭 36 模块参数 40 在用户空间编写驱动程序 42 .快速参考 44 第三章 字符设备驱动程序 46 scull的设计 46 主设备号和次设备号 47 一些重要的数据结构 53 字符设备的...

    LINUX设备驱动第三版_588及代码.rar

    内核符号表 预备知识 初始化和关闭 模块参数 在用户空间编写驱动程序 快速参考 第三章 字符设备驱动程序 scull的设计 主设备号和次设备号 一些重要的数据结构 字符设备的注册 open和release scull的内存...

    linux系统编程之线程.zip

    Linux内核线程实现原理 类Unix系统中,早期是没有“线程”概念的,80年代才引入,借助进程机制实现出了线程的概念。因此在这类系统中,进程和线程关系密切。 1. 轻量级进程(light-weight process),也有PCB,创建...

    入门学习Linux常用必会60个命令实例详解doc/txt

    halt执行时,杀死应用进程,执行sync(将存于buffer中的资料强制写入硬盘中)系统调用,文件系统写操作完成后就会停止内核。若系统的运行级别为0或6,则关闭系统;否则以shutdown指令(加上-h参数)来取代。  ...

    macchina:基本的系统信息获取程序,用Rust编写,着重于性能

    Macchina允许您查看基本的系统信息,例如主机名,内核版本,内存使用情况等等。 没有人想要一个速度慢的获取器,而macchina的主要目标是为您提供方便的功能,同时保持性能优先。 变更日志 我没有睡觉,而是取得了...

    嵌入式Linux系统移植步步通

    2.1.2 Linux操作系统 .......................................................................................................8 2.1.3 目标板最后运行的环境....................................................

    ARM-Linux系统移植

    2.1.2 Linux操作系统 .......................................................................................................8 2.1.3 目标板最后运行的环境..................................................

    update-initramfs:[镜像]使用bash更新您的initramfs

    /usr/src/linux/内核源文件,其中linux是到当前使用的内核目录的符号链接 启用内核设置以与initramfs一起使用。 请查阅以获取更多信息。 已安装以下软件包: gawk chmod cp cpio date find grep gzip ldd make md5...

    LINUX系统移植及UBOOT代码分析.zip

    Linux系统移植 目 录 第一部分 前言....................................................................................................................................8 1 硬件环境.........................

    unix-sockets-peers:查找哪个进程连接到给定的 unix 套接字

    不需要内核调试符号(见下文)。 这仅适用于 linux。演示 # netstat -na --unix -p Proto RefCnt Flags Type State I-Node PID/Program name Pathunix 3 [ ] STREAM CONNECTED 6825 982/Xorg /tmp/.X11-unix/X0......

    cadabra2:一种以场论为动力的计算机代数方法

    Cadabra 是一个符号计算机代数系统,专为解决量子和经典场论中遇到的问题而设计。 它具有广泛的张量计算机代数功能、张量多项式简化(包括多项对称性、费米子和反通勤变量)、Clifford 代数和 Fierz 变换、隐式坐标...

Global site tag (gtag.js) - Google Analytics