Skip to content

Development - Contributing


Clone the repository and install it in a virtualenv in an editable mode with the developers dependencies.

$ python -m venv env
$ source ./env/bin/activate
$ cd quokka
(env) $ pip install -e '.[dev]'
(env) $ python -c "import quokka; print(quokka.__version__)" 

Format the code

The project use the black formatter for the Python code with the defaults settings.

Running Black

(env) $ black bindings/python/

The C++ code is formatted using clang-format.

Updating the Protobuf definition

To update the Protobuf definition, follow this steps:

  1. <!> IMPORTANT <!> Open an issue on the official repository
  2. Update the proto/quokka.proto file with the new fields
  3. Increase the version number in CMakeLists.txt by :
  4. A major version if the change breaks backward compatibility
  5. A minor version otherwise
  6. Write the exporter code
  7. Update the python bindings accordingly
  8. Update the __quokka_version__ in bindings/python/ to match the one in step 3.
  9. Update the protobuf generated files for python using: python generate_py_protobufs

Add a new IDA Version / SDK

Add an image with the new IDA Version

For example, using Version 7.7:

  1. Go to ci
  2. Copy installer to ci/ida77/
  3. (Optional) Copy ~/.idapro/ida.reg to ci/ida77/ida.reg
  4. (Optional) Add the installation password in a file to remember it for next time
  5. Build the image
    $ docker build --file build.dockerfile \
             --build-arg IDA_DIRECTORY=ida77 \
             --build-arg IDA_PASSWORD=<install password> \
  6. (Optional). If you did not copy a ida.reg file, you should run the container first, open IDA (/opt/ida/idat64), accept the license and save the container (using docker commit).

Add the SDK in the repo

  1. Download the SDK from HexRays website
  2. Extract it
  3. Generate a password for the SDK archive.
  4. Compress the inner idasdk77/ directory in an archive protected by the password.
  5. Add the to the repository.

Other tips and tricks

Read the Dev's Tips & Tricks page!