我在 Linux 上使用 C 语言工作。我看过 gcc __section__
attribute 的用法(尤其是在 Linux 内核中)将数据(通常是函数指针)收集到自定义 ELF 部分中。如何检索和使用放置在这些自定义部分中的“内容”?
最佳答案
只要节名称产生有效的 C 变量名称,gcc
(ld
,而是)生成两个魔法变量:__start_SECTION
和 __stop_SECTION
。这些可用于检索部分的开始和结束地址,如下所示:
/**
* Assuming you've tagged some stuff earlier with:
* __attribute((__section__("my_custom_section")))
*/
struct thing *iter = &__start_my_custom_section;
for ( ; iter < &__stop_my_custom_section; ++iter) {
/* do something with *iter */
}
我找不到任何关于此功能的正式文档,只有一些晦涩的邮件列表引用。如果您知道文档在哪里,请发表评论!
如果您使用自己的链接描述文件(就像 Linux 内核那样),您必须自己添加魔术变量(参见 vmlinux.lds.[Sh]
和 this SO answer) .
参见 here另一个使用自定义 ELF 部分的示例。
关于c - 如何获取自定义 ELF 部分的开始和结束地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16552710/