Инструмент для генерации графа потока вызовов [C C ++ solaris linux] - PullRequest
3 голосов
/ 12 апреля 2011

Мне очень нравится IDA , но я работаю в Solaris над этим проектом.У меня есть машина с Linux, и если ничто не находится в той же лиге, что и IDA, то я убедлю руководство купить лицензию на нее.

За исключением этого, я ищу альтернативные предложения.Некоторые из других функций в IDA были бы полезны, но сейчас мне нужно главное - генератор графа потока вызовов , а не на основе исходного кода.Если это требует дополнительного вывода на этапе сборки, это нормально, но некоторые библиотеки, на которые мне нужно обратить внимание, у меня нет исходного кода.

Пока что, похоже, мой лучший выбор - это Valgrind Callgrind , lida и gprof .Любые дальнейшие предложения приветствуются.

re: gprof, в наборе компиляторов GNU, предоставленном нам Windriver, отсутствуют некоторые библиотеки, которые обычно поставляются с компилятором GNU для предоставления (среди прочего) средств для профилирования.Это хорошее решение более общей проблемы, но сейчас я предпочитаю сначала попробовать другие решения.

edit Некоторые из инструментов Rational (Purify, Quantify и т. Д.) Также могутхорошо работать для этого.Я в той же лодке, что и с IDA, но полагаю, что кто-то из Google может посчитать это предложение полезным.

edit2 Valgrind не был портирован на solaris / sparc; p

Ответы [ 3 ]

3 голосов
/ 12 апреля 2011

Взгляните на проект ERESI . Это фреймворк для обратного проектирования, в котором есть инструмент ELFsh с возможностью генерации CFG из машинного кода. У него пока нет стабильного / финального, но оно того стоит.

Если вы хотите попробовать:

  • скачать и установить (apt-get в Ubuntu)
  • пробег elfsh32. Вы войдете в оболочку.
  • загрузить ваш бинарный файл: load /bin/bash
  • проанализировать это: analyse
  • сгенерировать график: graph

Вы получите график в формате .dot и отрендеренный PNG (этот размер был слишком велик для размещения здесь).

2 голосов
/ 12 апреля 2011

Вы можете сгенерировать граф вызовов с помощью Gprof . Его можно визуализировать с помощью Kprof .

1 голос
/ 28 июня 2016

Очень поздний ответ, но он все еще может быть полезен. В Solaris вы можете использовать collect.

  • collect your_program your_args...
  • Будет сгенерирован каталог вроде test.1.er
  • Затем вы можете визуализировать график вызовов на консоли с помощью er_print -calltree test.1.er
  • Или в X-Window с analyser
...