Я пишу скрипт для извлечения всех функций (написанных пользователем) в двоичном формате.Извлечение только моих имен функций из двоичного файла ELF
Следующий сценарий оболочки извлекает свои имена функций, а также некоторые функции библиотеки, которая начинается с __
readelf -s ./a.out | gawk '
{
if($4 == "FUNC" && $3 != "0" && $7 == "13" && $8 != "main") {
print "b " $NF; //***Updated
}
}' &> function_names;
Вывод function_names файла:
b __libc_csu_fini
b PrintDivider
b PrintFooter
b __libc_csu_init
b PrintHeader
Я хотел бы извлечь только свою функцию. поэтому, как проверить, начинается ли имя функции с __, или любые другие альтернативы также высоко оцениваются.
Обновление:
Решение @djf прекрасно работает. Что делать, если файлы .c
, которые скомпилированы, также могут содержать функцию, начинающуюся с __
? В таком случае, как дифференцироваться?
nm также дает '_init, _start, _fini' – Jeyaram
@Jeyaram Нет, если вы не используете его в объектных файлах вместо исполняемого файла. Но см. Мое редактирование. – Jens
+1 есть .. исправленный. все еще 'main' идет :) – Jeyaram