gpt4 book ai didi

bfd - 使用 BFD 接口(interface)更新目标文件

转载 作者:行者123 更新时间:2023-12-02 03:32:30 27 4
gpt4 key购买 nike

我必须向现有目标文件添加一个符号。我目前正在尝试使用 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 接口(interface),我看不到任何用于复制/克隆现有 BFD 对象的 API。 BFD 文档有一个创建符号表的示例程序,但它位于新的输出目标文件中。我想更新现有的目标文件。

任何人都可以告诉我们如何使用 BFD 接口(interface)为任何一个简单的用例编辑目标文件。

非常感谢!

最佳答案

我自己想到了这个。我提到了 objcopy 实用程序代码。 copy_object() 函数完成我想要的任务。它根据命令行选项做很多额外的事情。我不得不扔掉所有这些代码,只保留核心复制功能,如设置段、复制符号表、复制重定位、复制段内容和私有(private)数据。如果有人感兴趣,我可以发布代码。

关于bfd - 使用 BFD 接口(interface)更新目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25790703/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com