修改 ELF 文件

6
我想给一个elf文件添加一个新的标志。这个标志应该在进程描述符中对内核可用。我的第一个想法是使用libelf,但不幸的是,在Ubuntu上似乎存在一个错误。Elfedit可能是一个不错的工具,但我没有找到Linux版本,特别是Ubuntu版本。
所以,我想知道是否有其他有用的工具可以向elf文件添加自定义标志?
非常感谢您的帮助!

你在libelf中遇到了什么bug? - Aaron Digulla
从type.c中包含的文件: /usr/include/libelf.h:98: 错误:在“off64_t”之前预期指定符限定词列表 ... 更多信息可以在此处找到: https://bugs.launchpad.net/ubuntu/+s...ls/+bug/201078 - Patrick
3个回答

2

能够修改内核以利用新标记的人,可能不会问如何将标记添加到ELF库中。

那么,您打算如何让内核使用这个新标记?此标记的目的是什么?

由于您正在添加到标准libelf中,您不能修复Ubuntu的错误并让他们知道您已经这样做(使修复可供他们使用),尽管他们可能需要将其向上级传递。


是的,你说得完全正确。如果我是一个合格的内核黑客,这可能是一个简单的任务。不幸的是,我刚刚开始在内核上进行一些实际工作。基本上,我想在ELF文件中指定一个标志,告诉内核应用程序需要一些“特殊处理”。这种特殊处理应该发生在上下文切换期间,我想知道被切换出去的任务是否在ELF文件中有这个自定义标志。换句话说,我有两个任务:(1)向相应的可执行文件添加自定义标志(2)使内核可以使用这个自定义标志。 - Patrick

1
请查看ELFIO库。它包含WriteObj和Writer示例。通过使用该库,您将能够创建和/或修改ELF二进制文件。

我非常喜欢这个库,最近几天一直在尝试将其转换为一个库。我已经将所有的源代码与模板和宏进行了转换(即拆分为声明和定义),但现在该库正在崩溃(哈哈)。那么,你是否考虑将其制作成一个“真正”的库呢? - kungfooman

0

(虽然这是一个老问题,但为了参考,我根据自己的经验写出了答案)

我建议在内存结构中读取elf文件,更改标志并使用您的内存结构加载进程内存。与错误修正相比,这种方法需要更少的努力。首先,请检查elf.c文件以获取elf、程序头和节头结构。您可以在您的结构中读取文件头,其中应该有三个结构成员用于elf、程序和节。从elf头开始在您的结构中读取。然后在elf头中给定的偏移量上读取程序头(对于所有程序头进行迭代)。以同样的方式,您可以通过节头读取所有节。将3个头结构封装在您自己的结构中还可以为您的其他结构成员提供额外所需的数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接