使用kvm接口探察内核空间的方法
2009-05-13 03:05:35来源:未知 阅读 ()
使用kvm按符号地址探察内核的一些要点:
1、用kvm_openfiles()函数获取后续操作所需的文件描述符。
2、用kvm_nlist()函数获取所关心的符号在内核中的地址。
3、用kvm_read()函数逐步将所关心的内容从内核空间复制到用户空间。
只要你知道内核中的数据是如何组织的,就可以通过kvm接口一步一步地把它挖出来。我原来分析内核路由表的时候用的是内核调试的方法,相比之下,kvm要简单方便多了。详细资料请参考man 3 kvm。
在编译的时候,需要使用-lkvm选项链接kvm库。另外,这个程序执行的时候需要root权限。
CODE:
[Copy to clipboard]
#include
#include
#include
#include
#include
/* 这个数组用于向kvm_nlist()函数传递需要查找其地址的所有内核符号,
* 数组最后一个元素须设为NULL。
*/
struct nlist nl[] = {
{ "_rt_tables"},
{ NULL },
};
/* 这个数组用于复制内核中的rt_tables[]数组的内容 */
struct radix_node_head *rt_tables[AF_MAX+1];
int main(void)
{
kvm_t *kvmd;
char buf[100];
struct radix_node_head v4head;
struct radix_node rnode;
/* 获取kvm文件描述符 */
if ((kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, buf)) == NULL) {
printf("kvm_openfiles fail! %s\n", kvm_geterr(kvmd));
exit(0);
}
/* 获取内核中的rt_tables符号的地址 */
if (kvm_nlist(kvmd, nl)
打印结果示例:
QUOTE:
v4head.rnh_treetop = 0xc1afc24c
rnode.rn_mklist = 0xc1afb4b0
rnode.rn_parent = 0xc1afc24c
rnode.rn_bit = 32
rnode.rn_bmask = ffffff80
rnode.rn_flags = 6
rnode.rn_offset = 4
rnode.rn_left = 0xc1c5cc78
rnode.rn_right = 0xc1afc264
v4路由表头的rnh_treetop字段应该指向的是radix树的中间根节点,这里是0xc1afc24c。而我们下面所打印的也正是中间根节点,它的rn_parent字段应该指向它自己,即0xc1afc24c,结果正确。这个根节点的rn_bit表示它的bit测试位置,这里等于32,正是ipv4地址在socket地址结构体中的实际起始bit偏移量。字节掩码为0x80,也表示它测试的是最左面的那个bit。rn_flags等于6,这是由RNF_ROOT(2)和RNF_ACTIVE(4)相或的结果。rn_offset为4,表示ipv4地址在socket地址结构体中的实际起始位置的字节偏移为4,这和前面的32bit是相对应的。从上面的分析可以看出,通过kvm接口读出的ipv4路由表中间根节点的内容完全正确,这确实是一个探察内核空间的好方法。
又写了一个探察指定进程的kinfo_proc结构体及其地址空间结构的例子。与前一个例子的不同之处就是这里要使用kvm_getprocs()函数来获得指定进程的kinfo_proc结构体,并由此开始探察进程的地址空间结构。目标进程是在命令行上用pid指定的。
同样,运行这个程序也需要root权限。
CODE:
[Copy to clipboard]
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- ACL 疑问 2009-05-13
- 最便宜的空间域名! 2014-11-11
- 升级FreeBSD7.0到7.1的方法 2009-05-13
- 从硬盘安装FREEBSD的方法 2009-05-13
- OpenBSD环境下安装PHP加速软件eAccelerator的方法[原创] 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash