是否可以对 /boot/vmlinuz 的非关键比较指令进行二进制修补并使其正常运行?

问题描述 投票:0回答:1

在低内核版本中,单个eBPF程序的指令数被限制在4096以内,而我想加载一个指令数超过4096的eBPF程序。我想知道是否可以只对 /boot/vmlinuz 的比较指令进行二进制修补,该指令用于检查正在加载的 eBPF 程序的指令数,放宽限制,使内核正常运行。

linux-kernel operating-system kernel reverse-engineering
1个回答
0
投票

原则上,您可以使用二进制补丁做任何事情。二进制修补内核与修补任何其他程序基本相同,尽管您需要首先解压缩内核,修补它,然后再次压缩它才能正确加载。

在修补 4096 限制的具体示例中,它可能很重要,也可能很重要。限制

BPF_MAXINSNS
设置为 4096,并在内核中的多个位置使用,包括作为某些静态数组的大小,因此修补这些数组将非常重要。另一方面,提升特权进程的insn计数的补丁非常简单(https://github.com/torvalds/linux/commit/c04c0d2b968ac45d6ef020316808ef6c82325a82),并且是一个易于应用的二进制补丁。因此,根据您需要触发的代码路径,进行此更改可能非常容易或非常困难。

© www.soinside.com 2019 - 2024. All rights reserved.