Это звучит так, как будто это должно быть легкой задачей, но это оказывается на удивление раздражающим, в основном потому, что ELF как формат файла раздражает генерация, поэтому большинство инструментов довольствуются его анализом.
Как описано здесь , GDB считывает информацию о символах из двух мест, сначала некоторую минимальную информацию из символов в разделах .symtab
и / или .dynsym
, а затем более подробную информацию из .debug_info
раздел, если он есть.
Это сразу предлагает два возможных способа добавления информации: либо добавить символ к .symtab
, либо сгенерировать свою собственную информацию DWARF, включая символ.
Однако генерация DWARF с нуля, похоже, является довольно необычным вариантом использования, поэтому единственный рабочий подход, который я нашел до сих пор, - это использование objcopy
для добавления символа в сам двоичный файл:
objcopy a.out --add-symbol function_name=.text:0x900,function,global a.out2
Обратите внимание, что GDB не любит абсолютные символы для функций, я должен был указать его как смещение в разделе .text
, чтобы быть полезным (т. Е. Иметь возможность устанавливать точки останова для функции и отображать ее в обратных следах)
Кроме того, я не смог найти никакого способа изменить поле «размер» символа.