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

Я хочу проверить функцию и связанный символ (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

Решение

Используйте libbfd:

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

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

0

Другие решения

Вы также можете написать свой собственный анализатор 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

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

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector