gpt4 book ai didi

linux - 从预编译的 Linux 内核模块中删除对 __gnu_mcount_nc 的引用

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:25 24 4
gpt4 key购买 nike

我有一个用于某些外围设备的二进制 Linux 内核模块。它工作正常,但它使用分析,我从中删除了该支持出于性能原因而使用内核。我无法重新编译该模块因为它是第 3 方专有软件,我无权访问到源代码。我只拥有所需的目标文件(*.o)将驱动程序链接到我的 Linux 内核版本。

是否可以处理.ko文件并删除跳转到 __gnu_mcount_nc功能?我正在考虑更改操作码来自bl <__gnu_mcount_nc>mov r8,r8 ,但由于它很难实现事实上,到外部函数的每个分支都有 ebfffffe操作码。这让我想到了我想避免的搬迁话题。我在看一些简单的解决方案。

Disassembly of section .text:

00000000 <some_func1>:
0: e92d4000 push {lr}
4: ebfffffe bl 18e0 <__gnu_mcount_nc>
8: e3a00001 mov r0, #1
c: e12fff1e bx lr

00000010 <some_func2>:
10: e92d4000 push {lr}
14: ebfffffe bl 18e0 <__gnu_mcount_nc>
18: e3a00001 mov r0, #1
1c: e12fff1e bx lr

00000020 <some_func3>:
20: e92d4038 push {r3, r4, r5, lr}
24: e92d4000 push {lr}
28: ebfffffe bl 18e0 <__gnu_mcount_nc>
2c: e1a04001 mov r4, r1
30: e59f3038 ldr r3, [pc, #56] ; 70 <some_func3+0x50>
34: e5905034 ldr r5, [r0, #52] ; 0x34
...

目标板基于armv7-a架构和Cortex-A9内核。

编辑:

问题 1: __mcount_loc包含指向 <__gnu_mcount_nc> 的相对指针。内核在修复地址期间如何知道指针相对于哪个部分?

问题2:似乎“黑客攻击”的内核模块不起作用。发出 insmod .ko 触发错误消息:

insmod: can't insert 'some_driver.ko': unknown symbol in module or invalid parameter

我是否必须从某些部分删除符号 __gnu_mcount_nc?即使现在还没有使用?

寻找一些想法,谢谢。

最佳答案

您应该使用 FTRACE 支持重新编译内核并启用 CONFIG_DYNAMIC_FTRACE

您无需担心它会影响性能 - 除非实际上启用了跟踪,否则所有对 __gnu_mcount_nc 的调用 will be NOPped out由内核加载器。这就是 __mcount_loc 部分(在最终的 .ko 中)的用途 - 它包含二进制文件中 bl __gnu_mcount_nc 调用的所有位置的列表。

关于linux - 从预编译的 Linux 内核模块中删除对 __gnu_mcount_nc 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17994412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com