Обнаружение определенных вызовов функций в исходных кодах с помощью objdump

Мне нужен способ обнаружить места, где вызывается определенная функция.
Например.:

myPrint():
main.c, line 28
utils.c, line 89

Дело в том, что мне нужны только вызовы функций, не определения или декларации. И он мне нужен не только для «простых» C-подобных идентификаторов, но даже для методов классов, функций, определенных в пространствах имен и т. Д., Потому что я буду использовать эту программу в основном для C ++.


Мои попытки

  1. GTags — Хорошо идентифицирует идентификаторы, но нет способа отличить вызовы функций от определений и т. Д.

  2. Cscope — хорошо для C, но иногда терпит неудачу с C ++

  3. objdump + addr2line — более подробно описано ниже

Я сейчас пытаюсь использовать objdump с addr2line сюда:

objdump --disassemble-all binary | grep 'nameOfFunction'

Вывод выглядит так:

5834c3: e8 e8 79 00 00          callq  58aeb0 <_ZN7espreso14IterSolverBase24Solve_RegCG_singular_domERNS_10ClusterCPUERSt6vectorIS3_IdSaIdEESaIS5_EE>
58bef4: e8 57 45 00 00          callq  590450 <_ZZN7espreso14IterSolverBase24Solve_RegCG_singular_domERNS_10ClusterCPUERSt6vectorIS3_IdSaIdEESaIS5_EEENKUliE_clEi>
58bf43: e8 08 45 00 00          callq  590450 <_ZZN7espreso14IterSolverBase24Solve_RegCG_singular_domERNS_10ClusterCPUERSt6vectorIS3_IdSaIdEESaIS5_EEENKUliE_clEi>
58bf7c: e8 cf 44 00 00          callq  590450 <_ZZN7espreso14IterSolverBase24Solve_RegCG_singular_domERNS_10ClusterCPUERSt6vectorIS3_IdSaIdEESaIS5_EEENKUliE_clEi>

А затем я беру номер из первого столбца и пытаюсь получить физическое местоположение в коде, подобном этому:

addr2line -e binary 5834c3

Иногда он находит вызов функции правильно, иногда он находит что-то совершенно другое (я думаю, что-то вроде ссылки и т. Д.).

Итак, мой вопрос — можно ли определить, какие выводы являются вызовами функций? Я вижу, что есть callq в выводе, но я не совсем уверен, что это только вызов функции в коде.

1

Решение

Задача ещё не решена.

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

Других решений пока нет …

По вопросам рекламы [email protected]