在内核中寻找内核符号表
来源:互联网 发布:js中style.position 编辑:程序博客网 时间:2024/06/05 19:31
from:http://hi.baidu.com/wzt85/blog/item/eb8546f2a64e7616b17ec548.html
在用户空间中可以用如下方法得到:
1. 从 System.map 文件直接得到地址。
例如,要得到 do_fork 的地址,可以在命令行执行 $grep do_fork /usr/src/linux/System.map 。
2. 使用 nm 命令。
$nm vmlinuz |grep do_fork
3. 从 /proc/kallsyms 文件获得地址。
$cat /proc/kallsyms |grep do_fork
在2.6较早的版本中可以用kallsyms_lookup_name()来查找, 但是在我得2.6.18中好像没有导出。
贴一下wnps0.26中使用的方法, 前几天看了下《LKM Rootkits on Linux x86 v2.6》的中文版,里面有段寻找内核符号的代码, 怎么看都眼熟, 在仔细看原来是偶wnps的代码^_^
/**
* read_kallsyms - find sysenter address in /proc/kallsyms.
*
* success return the sysenter address,failed return 0.
*/
#define SYSENTER_ENTRY "sysenter_entry"
int read_kallsyms(void)
{
mm_segment_t old_fs;
ssize_t bytes;
struct file *file = NULL;
char *p,temp[20];
int i = 0;
file = filp_open(PROC_HOME,O_RDONLY,0);
if (!file)
return -1;
if (!file->f_op->read)
return -1;
old_fs = get_fs();
set_fs(get_ds());
while ((bytes = file->f_op->read(file,read_buf,BUFF,&file->f_pos))) {
if (( p = strstr(read_buf,SYSENTER_ENTRY)) != NULL) {
while (*p--)
if (*p == '/n')
break;
while (*p++ != ' ') {
temp[i++] = *p;
}
temp[--i] = '/0';
sysenter = simple_strtoul(temp,NULL,16);
#if DEBUG == 1
printk("sysenter: 0x%8x/n",sysenter);
#endif
break;
}
}
filp_close(file,NULL);
return 0;
}
- 在内核中寻找内核符号表
- 内核符号表详解——如何在module中利用内核符号
- linux内核学习(3)我在寻找中...
- linux内核学习(3)我在寻找中...
- linux内核学习(3)我在寻找中...
- 内核符号表
- 内核符号表详解
- linux内核符号表
- 内核符号表详解
- linux内核符号表
- linux内核符号表
- 关于内核符号表
- 关于内核符号表
- 内核符号表
- 内核符号表
- 关于内核符号表
- 关于内核符号表
- 内核符号表详解
- 跨线程调用MFC成员函数
- kernel_thread函数简单分析
- Copy_from_user函数详细分析
- 与内存管理相关的几个宏
- 在python中嵌入c/c++
- 在内核中寻找内核符号表
- 漂亮的设计会带来长远的好处
- What does it mean to be an Open Source author? A story from the inside
- 增加wince中的NandFlash的容量
- 有复选框的树的延展
- 给自己定一个目标
- 文本控件
- Flex中如何使用Google Maps的例子
- NandFlash读取操作