抓取内核信息(三)-找到入口点
来源:互联网 发布:手机淘宝怎么开直通车 编辑:程序博客网 时间:2024/05/21 07:03
如果你深思一下语言中的任何一种数据类型,是否是一种抽象?比如,C中的int型,就是所有整数的一种抽象,只不过,因为内存和寄存器的有界,这个整数的范围不是数学中的无限,而是受计算机寻址范围的限制。那么,C语言中最恼人的指针类型呢?也不过是内存地址的一种抽象。
言归正传,回到Linux内核。如果把内核比喻成一个母家园的话,那么插入的模块就是围绕母亲的孩子。内核中存在有大量的变量和函数(统称为符号),母亲并不是把所有的符号都共享给孩子,而是根据需要分享一些符号出去,因此在内核代码中,凡是被EXPORT_SYMBOL()宏导出的符号,孩子们才能直接调用。可是,有时候孩子想使用的符号并没有被母亲释放出来怎么办?这就是上一讲中所提的问题所在。
实际上,为了系统管理员便于观察内核的信息,内核已经提供了出口,这就是proc文件系统。进入proc目录,犹入进入大集市,各种信息应接不暇。其中有一个叫kallsyms文件中存放有所有符号的地址。当你知道了一个变量或函数的地址,就相当于找到了其信息存放的入口点,借助于指针,抓取它们的内容就轻而易举了。
动起手来,在kallsyms中找一个你熟悉的变量,比如super_blocks, inode,打印出其某些字段的内容。例如,在Linux文件系统中,每个文件系统都有一个超级块,以下模块打印出超级块中某些字段的内容。
#include <linux/module.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/list.h> #include <linux/spinlock.h> #include <linux/kdev_t.h> #define SUPER_BLOCKS_ADDRESS 0xc048db0c //from /proc/kallsyms #define SB_LOCK_ADDRESS 0xc05b2440 // from /proc/kallsyms static int __init sbinfo_init(void) { struct super_block *sb; struct list_head *pos; printk("sb:%d/tinode:%d/n",sizeof(structsuper_block),sizeof(struct inode)); printk("/nprint file_sys_type:/n"); spin_lock((spinlock_t *)SB_LOCK_ADDRESS); list_for_each(pos, (struct list_head *)SUPER_BLOCKS_ADDRESS) { sb = list_entry(pos, struct super_block, s_list); printk("dev_t:%d:%d ",MAJOR(sb->s_dev),MINOR(sb->s_dev)); printk("count:%d file_typename:%s/n", sb->s_count, sb->s_type->name); } spin_unlock((spinlock_t *)SB_LOCK_ADDRESS); return 0; } static void __exit sbinfo_exit(void) { printk("unloading..../n"); } module_init(auditfs_init); module_exit(auditfs_exit); MODULE_LICENSE("GPL");
- 抓取内核信息(三)-找到入口点
- 抓取内核信息(二)-遍历数据结构
- uboot内核入口点30008000的由来(50008000同理)
- uboot内核入口点30008000的由来(50008000同理)
- 【链表】若单链表存在环,如何找到环的入口点。
- 模块已加载,但是无法找到regsvrerver入口点
- 关于链表中是否带环和找到环的入口点
- 关于链表中是否带环和找到环的入口点
- 抓取内核信息(一)-从简单入手
- Windows x64内核中修改进程入口点
- 入口点
- 19、判断一个单链表是否有环?找到环的入口点。判断两个单链表是否相交,找到相交点。
- ollydbg找到主程序入口
- 判断单链表是否存在环 及 找到环的入口点---4A
- 无法在 DLL“kernel32”中找到名为“XXX”的入口点
- 常见程序入口点(OEP)特征
- 基于Internet Explorer内核的网页信息抓取程序
- 基于Internet Explorer内核的网页信息抓取程序
- ubuntu 下开启 apache 的 rewrite 模式
- Tomcat处理编码的流程
- 二分搜索
- 浅谈unicode和gb2312之间的转换
- 黄粱一梦
- 抓取内核信息(三)-找到入口点
- 也论从1亿个整数中找出最大的1万个(上)
- Photoshop液化滤镜概述(Photoshop帮助文档)
- 也论从1亿个整数中找出最大的1万个(下)
- 浏览器编码知识
- 进步想想
- 打印空心菱形
- tabhost within tabActivity change intent
- poj 1936 "all in all"