Metadata-Version: 2.1
Name: pysquishy
Version: 0.1.2
Summary: LLVM pass wrapper library for creating robust shellcode
License: MIT
Author: novafacing
Author-email: rowanbhart@gmail.com
Requires-Python: >=3.8,<4.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Requires-Dist: coloredlogs (>=15.0.1,<16.0.0)
Requires-Dist: lief (>=0.12.1,<0.13.0)
Description-Content-Type: text/markdown

# squishy 🐻‍❄️

A collection of new (LLVM 15) passes to compile normal-looking code to a callable, jump-to-able blob. Also includes a python library that provides
a python interface to produce a blob for any architecture triple.

Inspired by SheLLVM, but should address some of the outdated issues with
that project. Thanks to SheLLVM for the inspiration :)

## Installing

The easiest way to install `squishy 🐻‍❄️` is from PyPi (sorry about the name, PyPi has weird rules). If an sdist is installed, `meson` must be installed and
`llvm-15` must be available.

```
python3 -m pip install pysquishy
```

## Building

`squishy 🐻‍❄️` uses the [meson](https://mesonbuild.com) modern build system. To
build, first ensure that `meson` and `ninja` are installed, and that you have
an installation of `llvm-15` which you can get [here](https://apt.llvm.com).

Then, invoke:

```
meson build
cd build
meson compile
```

to produce the [library](build/src/libsquishy.so).


## Passes

1. Aggressive Inliner: Recursively applies alwaysinline and inlines function
  calls and global variables into the main function.
