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

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

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

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

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

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

edit2 Valgrind не был перенесен в солярис /sparc;p

3 ответа

Решение

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

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

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

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

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

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

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