2014-09-11 4 views
3

Мне нужно добавить символ в существующий файл объекта. В настоящее время я пытаюсь использовать цель 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 для любого простого варианта использования.

Большое спасибо!

ответ

1

Понятно об этом. Я упомянул код утилиты objcopy. Функция copy_object() выполняет задачу, что я хотел. Он использует много дополнительных материалов на основе опции командной строки. Мне пришлось выбросить все эти коды и сохранить только основные функции копирования, такие как настройка разделов, копирование таблицы символов, копирование репозиций, копирование содержимого раздела и личных данных. Я могу опубликовать код, если кому-то это интересно.

Смежные вопросы