Если в файле есть relocation-информация, то можно попробовать простой алгоритм:
1. Для каждой процедуры определяем адреса начала и конца.
2. В заданном диапазоне отлавливаем relocation-символы с сылками
на другие процедуры. Соотвественно строим граф.
Соответственно objdump вывод можно обрабатывать чем угодно, дцать лет
назад сам использовал awk.
Если relocation-символов нет, то нужен анализ кода и поиск переходов.
Неприятности:
1. Не определяются вызовы в стиле (*func)(), некоторые
инициализационные процедуры задаются таблицами.
2. Нужна relocation-таблица. При сборке и использовании отностительной
адресации (таки ARM) символы могут выдавливаться. Поэтому оптимально
генерировать по объектным файлам.