如何从 Linux 内核模块的 ELF 头文件中定位 module_init() 偏移量?

逆向工程 拆卸 linux 小精灵 司机 入口点
2021-06-25 07:21:26

标题是不言自明的,但可以更好地解释自己。我有一个 ELF 二进制 - 可加载内核模块,用符号编译。我想知道如何定位module_init()函数的偏移量
我可以使用 找到此信息readelf吗?

2个回答

readelf读取参数是“-s”:

 Options are:
    -a --all               Equivalent to: -h -l -S -s -r -d -V -A -I
    -h --file-header       Display the ELF file header
    -l --program-headers   Display the program headers
        --segments          An alias for --program-headers
    -S --section-headers   Display the sections' header
       --sections          An alias for --section-headers
    -g --section-groups    Display the section groups
    -t --section-details   Display the section details
    -e --headers           Equivalent to: -h -l -S
    -s --syms              Display the symbol table
       --symbols           An alias for --syms
    --dyn-syms             Display the dynamic symbol table
    -n --notes             Display the core notes (if present)

因此,使用readelf -s module.ko就足以读取符号。

首先拆解你的模块

objdump -xDsl module.ko > disassemble.txt

然后编辑文件并搜索部分init。它看起来像这样:

部分拆卸.init.text

002bdb01 <init_module>:
init_fct():