4 минуты
Установка radare2-bindings и решение проблем
Одна из особенностей фреймворка, которая выделяет его на фоне прочих дизассемблеров - поддержка большого количества ЯП. Но сделать эту поддержку на своей локальной машине в некоторых случаях бывает очень сложно. Сегодня я постараюсь описать с какими сложностями столкнулся при установке биндингов на несколько систем и способы их решения.
Хоть и для установки есть автоматический скрипт в самом фреймворке:
darkair:radare2 dukebarman$ sys/python.sh
Но он как минимум требует зависимости о которых я сегодня и расскажу.
В большинстве дистрибутивов Linux достаточно воспользоваться следующим набором команд, за который спасибо REU.
git clone git://github.com/radare/radare2.git
cd radare2
./configure --prefix=/usr
make
sudo make install
wget http://download.gnome.org/sources/vala/0.26/vala-0.26.0.tar.xz
tar -Jxf vala-0.26.0.tar.xz
cd vala-0.26.0
./configure --prefix=/usr
make
sudo make install
git clone git://github.com/radare/valabind.git
cd valabind
make
sudo make install
git clone git://github.com/radare/radare2-bindings.git
cd radare2-bindings
./configure --prefix=/usr --enable=python
make
sudo make install
Если видите ошибки, то скорее всего понадобится доставить следующие пакеты:
configure: error: flex not found but required
sudo apt-get install flex
configure: error: bison not found but required
sudo apt-get install bison
checking for GLIB... no
sudo apt-get install glib-2.0
Во время проверки наличия языков в ОС, может появится такая ошибка:
python: /usr/bin/valabind-cc: 1: eval: swig: not found
sudo apt-get install swig
Для ленивых:
sudo apt-get install flex bison glib-2.0 swig
В случае OSX некоторые шаги будут отличаться. Я использую macports на своей системе, поэтому только для них распишу команды. Первое отличие - vala, ставим из портов, а не из исходников:
sudo port install vala
Второе, помимо самого swig, нам требуется swig для каждого языка отдельно:
sudo port install swig
Порты с языками выглядят следующим образом:
sudo port install swig-python
sudo port install swig-lua
Все остальные шаги такие же.
Наконец-то можем проверить установлены ли python-bindings. Тестируем на различных скриптах:
darkair:radare2-bindings dukebarman$ cd python
darkair:python dukebarman$ python test-r_asm.py
---------------------------->8- - - - - -
OPCODE: mov eax, 33
ARCH: x86.olly
HEX: c7c021000000
---------------------------->8- - - - - -
OPCODE: bipush 33
ARCH: java
HEX: 1021
darkair:python dukebarman$
Для более лучшего тестирования советую эти скрипты перенести в отдельную папку. Может появится следующая ошибка:
ImportError: No module named r_util
Скрипт проверяет наличие установленных версий по своему списку и начинает с python2.6. Если он будет найден, то и установит к нему, а не к тому Python, который считается по-умолчанию в системе. В моём случае в ОС оставалась старая версия python2.6 для некоторых программ из портов, после её удаления всё пришло в норму. Поддержка Python3 есть, но процесс переезда ещё не закончен.
Всё проверялось на OSX 10.10 Yosemite.
Языки так же можно компилировать отдельно из каждой папки. Например, в случае lua это помогло с ошибкой рассмотренной дальше:
darkair:radare2-bindings dukebarman$./configure
darkair:radare2-bindings dukebarman$ cd lua
darkair:radare2-bindings dukebarman$ make
Ошибка при установке lua:
lua.c:6:10: fatal error: 'lua.h' file not found
На данный момент есть поддержка только lua 5.1. Но в Linux Mint для этого нужно поставить следующие пакеты:
apt-get install lua5.1 lua-dev
Go пока что находится в тестовом режиме, а остальные языки на данный момент меня не интересовали.
Помимо установки биндингов, я хочу затронуть ошибки самого radare2, с которыми периодически сталкивался в повседневной работе. В основном они проявляются при обновлении фреймворка.
Первые две проявляются во время компиляции:
...
cp: /usr/share/radare2/0.9.9-git/yara and shlr/yara/ are identical (not copied).
...
cp: cannot copy a directory, `shlr/yara/', into itself, `/usr/share/radare2/0.9.9-git/yara/yara'
После “успешной” установки и проверки:
darkair:radare2 dukebarman$r2 -v
...
WARNING: r2 library versions mismatch! See r2 -V
Все они решаются удалением и установкой с нуля. Для некоторых достаточно выполнить следующие команды из папки с исходниками:
sudo make unistall
sudo make purge
Если они не помогли, то нужно проверить вручную следующие разделы и почистить их. Желательно так же удалить текущую папку и снова склонировать из репозитория:
/usr/lib/radare2
/usr/share/radare2
И все файлы со следующим префиксом:
/usr/libr/r*
Если фреймворк ставился в стандартную папку, то пути будут выглядеть так:
/usr/local/lib/radare2
/usr/local/share/radare2
/usr/local/libr/r*
И бинарники от radare2 из исходников:
/usr/bin/
/usr/local/bin/
Если и это не помогло, то заходим на канал #radare в сети Freenode и жалуемся. Но лучше оформить багу(issue) в репозиторий
О всех проблемах разработчикам уже уведомил (даже можно сказать надоедаю постоянно) и вскоре они будут поправлены. Возможно.