获得内核函数地址的四种方法
来源:互联网 发布:ubuntu 字体 编辑:程序博客网 时间:2024/06/05 10:24
LinuxDeviceDrivers/study/debug/filesystem/procfs/func_addr
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作
因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供收录, 鄙人在此谢谢啦
本文以获取内核函数perf_trace_do_sys_open( )
的地址为例。
1 从 System.map 文件中直接得到地址
内核镜像的 System.map
文件存储了内核符号表的信息, 可以通过此文件获取到具体的信息
查看内核函数的地址
grep perf_trace_do_sys_open /boot/System.map-4.4.0-72-generic
查看地址对应哪个内核函数
grep ffffffff811fdb90 /boot/System.map-4.4.0-72-generic
2 使用 nm 命令读取 vmlinux 的信息
nm /usr/lib/debug/boot/vmlinux-4.4.0-72-generic | grep perf_trace_do_sys_opennm /usr/lib/debug/boot/vmlinux-4.4.0-72-generic | grep ffffffff811fdb90
3 从 /proc/kallsyms 文件获得地址
cat /proc/kallsyms | grep perf_trace_do_sys_opencat /proc/kallsyms | grep ffffffff811fdb90
4 使用内核函数接口
- 已知内核符号,获取内核符号地址
使用 kallsyms_lookup_name( )
该函数在 kernel/kallsyms.c
文件中定义的, 要使用它必须启用 CONFIG_KALLSYMS
编译内核.
kallsyms_lookup_name( )
接受一个字符串格式内核函数名, 返回那个内核函数的地址.
kallsyms_lookup_name("函数名");
- 已知内核符号地址, 获取内核符号名
使用 sprint_symbol
内核函数
#include <linux/kallsyms.h>int sprint_symbol(char *buffer, unsigned long address)
函数功能描述 :
该函数根据一个内存中的地址 address
查找一个内核符号, 并将该符号的基本信息, 如符号名 name
, 它在内核符号表中的偏移 offset
和大小 size
, 所属的模块名(如果有的话)等信息连接成字符串赋值给文本缓冲区 buffer
. 其中所查找的内核符号可以是原本就存在于内核中的符号, 也可以是位于动态插入的模块中的符号.
输入参数说明
返回参数说明
返回值是一个 int
型, 它表示内核符号基本信息串的长度, 也即是 buffer
所表示的字符串的长度.
本作品/博文 ( AderStep-紫夜阑珊-青伶巷草 Copyright ©2013-2017 ), 由 成坚(gatieme) 创作,
采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名成坚gatieme ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的.
基于本文修改后的作品务必以相同的许可发布. 如有任何疑问,请与我联系.
- 获得内核函数地址的四种方法
- 获得内核函数地址的四种方法
- 获得内核函数地址的四种方法
- Windows上获得IP地址的四种方法
- Windows上获得IP地址的四种方法
- 在函数内部获得函数入口地址的方法
- 获得类对象的四种方法
- 获得IP地址的方法
- 管理员身份获得 SYSTEM 权限的四种方法
- 从管理员身份获得 SYSTEM 权限的四种方法
- 从管理员身份获得 SYSTEM 权限的四种方法
- 从管理员身份获得 SYSTEM 权限的四种方法
- 获得中国电信、网通、铁通IP段的四种方法
- Action类中获得HttpServletResponse对象的四种方法
- 获得中国电信、网通、铁通IP段的四种方法
- 获得用户真实IP的四种方法
- 获得spring里注册Bean的四种方法
- Struts2获得Application,Session,Request的四种方法
- shiro学习:shiro整合SpringMVC的web项目
- struts2 小案例
- Mybatis入门到精通-Mapper映射器模式
- python: filter函数
- CIDR与路由聚合
- 获得内核函数地址的四种方法
- IEnumerator 和IEnumerable区别
- 高效App框架设计与重构
- MySQL链接
- [agc017F]Zigzag
- Filter(第三节)
- python: reduce函数
- 列表表达式实例
- Action和Page数据共享方式 (值栈/Context) 值栈获取方式