zoukankan      html  css  js  c++  java
  • 获得内核函数地址的四种方法



    本文以获取内核函数 sys_open()的地址为例。
       1System.map文件中直接得到地址
          $ grep sys_open /usr/src/linux/System.map
       
       2)使用 nm 命令
          $ nm vmlinuz | grep sys_open
       
       3) /proc/kallsyms 文件获得地址
          $ cat /proc/kallsyms | grep sys_open
       
       4)使用 kallsyms_lookup_name() 函数
          是在kernel/kallsyms.c文件中定义的,要使用它必须启用CONFIG_KALLSYMS编译内核。
          kallsyms_lookup_name()接受一个字符串格式内核函数名,返回那个内核函数的地址。
            kallsyms_lookup_name("sys_open");

     

    ----------------------------------------------------------------------------------------------------------------------------

    1已知内核符号地址,获取内核符号名

    .1 使用sprint_symbol内核函数

    #include <linux/kallsyms.h>

    int sprint_symbol(char *buffer, unsigned long address)

    函数功能描述:

    该函数根据一个内存中的地址address查找一个内核符号,并将该符号的基本信息,如符号名name,它在内核符号表中的偏移offset和大小size ,所属的模块名(如果有的话)等信息连接成字符串赋值给文本缓冲区buffer 。其中所查找的内核符号可以是原本就存在于内核中的符号,也可以是位于动态插入的模块中的符号。

    输入参数说明:buffer :文本缓冲区,它用来记录内核符号的信息,它是一个输出型参数。

    address:内核符号中的某一地址,为输入型参数。

    返回参数说明:返回值是一个int型,它表示内核符号基本信息串的长度,也即是buffer所表示的字符串的长度。  

    2已知内核符号,获取内核符号地址

    .1 使用 kallsyms_lookup_name() 
      该函数在kernel/kallsyms.c文件中定义的,要使用它必须启用CONFIG_KALLSYMS编译内核。
       kallsyms_lookup_name()接受一个字符串格式内核函数名,返回那个内核函数的地址。
        kallsyms_lookup_name("函数名");

    3通用

       3.1利用System.map
          $ grep “函数名或地址” /usr/src/linux/System.map
       
       3.2使用nm 命令
          $ nm vmlinuz | grep “函数名或地址”
       
       3.3利用 /proc/kallsyms 
          $ cat /proc/kallsyms | grep “函数名或地址”

     

  • 相关阅读:
    算法
    用python代码编写象棋界面,棋盘覆盖问题
    深浅拷贝的原理
    MongoDB简介,安装,增删改查
    DBUtils-Python数据库连接池
    websocket
    Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
    跨域
    最长公共子序列/子串 LCS(模板)
    寒假作业---蓝桥杯---DFS
  • 原文地址:https://www.cnblogs.com/alan666/p/8312014.html
Copyright © 2011-2022 走看看