A python interface into Valgrind's VEX IR!
For now, pyvex is tricky to build. First, valgrind needs to be compiled with fPIC:
mkdir ~/valgrind
cd ~/valgrind
wget http://valgrind.org/downloads/valgrind-3.8.1.tar.bz2
tar xvfj valgrind-3.8.1.tar.bz2
cd valgrind-3.8.1
CFLAGS=-fPIC ./configure --prefix=$HOME/valgrind/inst
make
make install
Great! Now you can build pyvex. First, you need to build the stuff in the angr/vex directory. Then, you can build pyvex!
python setup.py build
Sweet!
You can use pyvex pretty easily. For now, it only supports translation and pretty printing:
import pyvex
irsb = pyvex.IRSB(bytes="\x55\xc3") # translates "push ebp; ret" to VEX IR
irsb.pp() # prints the VEX IR
Awesome stuff!
- pretty-printing an emptyIRSB segfaults
- there is no memory management. VEX is kind of weird with this, so care will have to be taken...
- converting from string to tag is currently very slow (a hastily written consecutive bunch of strcmps)
- IRCallee assumes that addresses are 64-bytes long, and will corrupt memory otherwise. This can be fixed by writing a getter/setter instead of using the macroed ones.
- deepCopying a binder IRExpr seems to crash VEX
- equality (for those things that easily have it) should be implemented as a rich comparator