Легко построить график вызовов A-вызовов-B, когда оператор вызова явно упоминает B. Сложнее обрабатывать косвенные вызовы, как вы заметили.
Хороших инструментов статического анализа формируют оценки содержания переменных указателей путем распространения указателя задание/копия/арифметики по данным программы потоков (между и внутри процедурный [ «глобальные»]) с использованием различных схем, часто консервативны («вы слишком много»).
Без такой оценки вы не можете понять, что содержит указатель, и поэтому просто не может сделать полезного предсказания (ну, вы можете использовать предельную консервативную оценку, что она пойдет куда угодно, но я думаю, что вы уже отвергли это решение).
DMS Software Reengineering Toolkit имеет static control/dataflow/points-to/call graph analysis, который применяется к огромным системам (~ ~ 25 миллионов строк) кода C и создает такие графики вызовов. Оборудование для этого довольно сложно, но вы можете найти его в расширенных разделах в литературе компилятора. Я сомневаюсь, что вы хотите реализовать это в Perl.
Это проще, если у вас есть исходный код, потому что вы хотя бы надежно знаете, что такое код, а что нет. Вы пытаетесь сделать это на объектном коде, что означает, что вы даже не можете исключить данные.
, если я использую исходный код для поиска графа вызовов, как методы анализа кода C в разных файлах. Например, например: - метод A, определенный в файле A и методе B в файле B, как вызывать граф, проходящий через разные файлы? – prap19 2010-12-04 20:38:20