Tips and Tricks

Use the struct module

Use the python struct module to pack and unpack custom structs over ffi.

Let’s say you received a ptr to a struct:

#![allow(unused)]
fn main() {
#[repr(C)]
struct Foo {
    foo: u32,
    bar: u64,
    baz: *const () // platform sized ptr
}
}

Then you could pack or unpack it in python like so

import struct

class Foo:
    def __init__(self, bar, baz, some_ptr):
        self.bar = bar
        self.baz = baz
        self.some_ptr = some_ptr

    def pack(self):
        return struct.pack('IQP', self.bar, self.baz, self.some_ptr)

    @classmethod
    def unpack(cls, packed):
        bar, baz, some_ptr = struct.unpack('IQP', packed)
        return cls(bar, baz, some_ptr)

Store bytes in hex

This is relatively simple, but useful way to store your bytes in a readable format.

mybytes = bytes.fromhex('00 00 00 00')