我必须向现有的目标文件添加一个符号。我目前正在尝试使用 elf32-i386 目标。我尝试以读/写模式打开目标文件:
abfd = bfd_fopen ("test.o", "elf32-i386", "r+", -1);
我在阅读现有的符号表时没有问题。我将它与 objdump 输出进行了比较,这很好。但是当我在现有的 asymbol** 列表中添加一个新符号并尝试通过调用 `bfd_set_symtab(abfd, newsymtab, newsymtab_count) 来设置新符号表时,会返回失败。
查看bfd_set_symtab()
定义的 syms.c 文件,似乎允许使用“只写”模式创建的 bfd 对象设置符号。
if (abfd->format != bfd_object || bfd_read_p (abfd))
{
bfd_set_error (bfd_error_invalid_operation);
return FALSE;
}
bfd_read_p (abfd) expands to :
((abfd)->direction == read_direction || (abfd)->direction == both_direction)
“+”模式是both_direction。
我无法以写入模式打开目标文件,因为它会清除文件中的现有数据。我只能选择将使用读取模式创建的 BFD 对象复制到使用新输出对象文件的写入模式创建的另一个对象。查看了 BFD 接口,我看不到任何 api 来复制/克隆现有的 BFD 对象。BFD 文档有一个创建符号表的示例程序,但它位于一个新的输出对象文件中。我想更新现有的对象文件。
谁能告诉我们如何使用 BFD 接口为任何一个简单的用例编辑目标文件。
非常感谢!