首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BFD接口更新对象文件

使用BFD接口更新对象文件
EN

Stack Overflow用户
提问于 2014-09-11 14:53:02
回答 1查看 212关注 0票数 3

我必须向现有的对象文件中添加一个符号。我目前正在尝试一个elf32-i 386目标。我尝试在读/写模式下打开对象文件:

代码语言:javascript
复制
abfd = bfd_fopen ("test.o", "elf32-i386", "r+", -1);

我在阅读现有的符号表时没有问题。我把它与objdump输出进行了比较,结果很好。但是,当我将一个新符号添加到现有的非对称符号**列表中,并试图通过调用`bfd_set_symtab(abfd、newsymtab、newsymtab_count)来设置新符号表时,就会返回failure。

查看定义bfd_set_symtab()的syms.c文件,似乎允许使用“只写”模式创建的bfd对象设置符号。

代码语言:javascript
复制
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接口来编辑一个对象文件,用于任何一个简单的用例。

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-28 06:41:32

我自己想到的。我参考了objcopy实用程序代码。copy_object()函数完成我想要的任务。它基于命令行选项做了许多额外的事情。我不得不丢弃所有这些代码,只保留核心复制函数,如设置节、复制符号表、复制重定位、复制节内容和私有数据。如果有人感兴趣的话,我可以贴出密码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25790703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档