Мне нужно добавить символ в существующий файл объекта. В настоящее время я пытаюсь использовать цель elf32-i386. Я попытался открыть файл объекта в режиме чтения/записи:Обновление объектного файла с использованием интерфейса BFD
abfd = bfd_fopen ("test.o", "elf32-i386", "r+", -1);
У меня нет никаких проблем при чтении существующей таблицы символов. Я сравнил его с выходом objdump, и это нормально. Но когда я добавляю новый символ в существующий список асимметров ** и пытаюсь установить новую таблицу символов, вызывая `bfd_set_symtab (abfd, newsymtab, newsymtab_count), возвращается отказ.
Означает файл syms.c, где определено bfd_set_symtab()
, кажется, что объект 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)
Режимы «+» оба направляются.
Я не могу открыть объектный файл в режиме записи, так как он уничтожит существующие данные в файле. У меня осталась единственная возможность копирования объекта BFD, созданного с использованием режима чтения, другому, созданному с использованием режима записи нового файла выходных объектов. Посмотрел на интерфейс BFD, и я не вижу никакого api для копирования/клонирования существующего объекта BFD. В документации BFD есть пример программы для создания таблицы символов, но она находится в новом файле выходных объектов. Я хочу обновить существующий файл объекта.
Может кто-нибудь рассказать, как мы можем редактировать объектный файл с использованием интерфейса BFD для любого простого варианта использования.
Большое спасибо!