【发布时间】:2021-07-17 20:46:39
【问题描述】:
我想检查 kernel/bpf/verifier.c 中的函数加载到的内存。 在编译到 verifier.o 之后,该对象被链接到内核中。在 /proc/kallsyms 中只列出了非静态函数。但是我想要该 c 文件中定义的所有函数的地址。如果 kaslr 关闭,它们应该按顺序位于内核空间中还是?
如果是,有没有办法确定地址范围?
谢谢
【问题讨论】:
-
只是一个想法:你能
printk使用&function_name获得该文件中每个函数的地址吗? -
我可以,但是文件很大(13k 行),这不会缩放,也不会给我函数的大小。我正在寻找一种更通用的方式。这里的大多数功能也是静态的。并且为它编写代码可能会变得肮脏和不稳定
-
另一个想法:this answer 可能会在 kallsyms 中为您提供更多信息(尽管仍然不确定它是否涵盖了您想要的所有内容,我正在寻找)。
-
是的,我已经看过这篇文章了。我试图编译没有内联标志的 bpf 子系统,但我想这是不成功的(将它附加到 kernel/bpf 目录中 makefile 的 cflags 中)。但是,如果编译成功并且没有内联,则此方法也不起作用。也许我尝试使用 Kernel 选项,但回复表明它只影响非静态变量而不影响函数。
-
目前我能想到的唯一其他选择是读取
/boot/目录中的System.map文件。
标签: linux linux-kernel kernel memory-alignment memory-layout