Получить информацию о функциях и соответствующих символах в ELF

0

Я хочу проверить функцию и соответствующий символ (ELF) в C/C++.

Я ранее использовал gdb, а затем получил информацию, которую хотел.

gdb ./mybinary
<gdb promt and reading elf..>
(gdb) info functions
0x000000000067a5a0  bfd_true
<etc..>

Таким образом, мой вопрос заключается в том, как я могу получить ту же информацию в своей программе.

Примечание. Я хочу иметь возможность выполнять функции со связанными символами один за другим в моей программе, а не сразу, как с gdb.

Предполагаемый код для задачи:

int main()
{
   // any code for elf lookup (functions and related symbol) (while loop)
   // result_symbol is a variable with information about function related symbol
   // result_function is a variable with information about function name
   // it should be possible to compare the data with other data
   char function_compare = "system";
   if(!strcmp(result_function, function_compare)
   {
      std::cout << "system() function found in the ELF!" << std::endl;
   }
}
  • 0
    Больше похоже на работу сценария, использующего nm или ld для вывода списка символов и их поиска.
Теги:
elf

2 ответа

0

Использовать libbfd:

https://sourceware.org/binutils/docs/bfd/

Это библиотека, используемая средствами binutils для получения информации об символах ELF.

  • 0
    Есть ли примеры, доступные с bfd, который использует информацию о функциях в ELF и связанных символах?
  • 0
    Использование libffd для чего-либо обычно является ошибкой. libbfd был написан с единственной целью - как уровень абстракции для компоновщика GNU. Это несколько работает для этой роли, и чрезвычайно плохо для всего остального.
Показать ещё 1 комментарий
-1

Вы также можете написать собственный парсер ELF. Обратите внимание, что объекты для 32-битной и 64-битной платформы немного отличаются.

Экспортированная функция указана в таблице перемещений. Имена символов находятся под символами SHT_SYNSYM/ELF32_Sym или SHT_SYNSYM/ELF64_Sym соответственно. Адреса перемещений обычно находятся под R_386_ * на x86 и R_X86_64_GLOB_DAT/R_X86_64_JMP_SLOT на 64-битном объекте.

ELF разработан, чтобы быть простым и для вашей справки, мой 32-разрядный парсер имеет около 350 строк кода, а 64-разрядный парсер - около 320 строк, и они делают гораздо больше, чем просто анализировать формат.

Вы можете найти дополнительную информацию по адресу: wiki.OSDev.org/ELF

Я рекомендую также прочитать ELF ABI для x86 и x86_64, предоставленных во внешних ссылках.

  • 0
    «Экспортируемые функции перечислены в таблице перемещений» - нет, их нет. Вы имеете в виду таблицу символов .
  • 0
    Что действительно может быть полезно, так это ссылка на исходный код ваших ELF-анализаторов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню