detrojt 0.1.1

A hack to support deserialization of arbitrary trait objects
Documentation
# Deserializeable trait objects

[![Documentation](https://docs.rs/detrojt/badge.svg)](https://docs.rs/detrojt)
[![Crates.io](https://img.shields.io/crates/v/detrojt.svg)](https://crates.io/crates/detrojt)

[Documentation for the `master` branch](https://rufflewind.com/detrojt)

A dirty hack to support deserialization of arbitrary trait objects.

This is a proof-of-concept created in response to [rust-lang/rfcs#668](https://github.com/rust-lang/rfcs/issues/668) as well as Dmitry Gordon's question [*How can deserialization of polymorphic trait objects be added in Rust if at all?*](https://stackoverflow.com/q/44231020/440302) ([related Rust Forum post](https://users.rust-lang.org/t/reflection-in-rust/11069)).

## Caveat emptor

**Deserialization may cause arbitrary code execution.**  The library has some sanity checks to make it hard to accidentally screw up, but there's no guarantee that this library is safe against a malicious attacker.

Even for trusted data, deserializing may cause undefined behavior on platforms and configurations that violate any of the following assumptions:

  - The data being deserialized was originally serialized by the exact same executable built under identical conditions (architecture, optimization levels, other compiler flags, etc)
  - All vtables are mapped to a single contiguous block of memory, located at fixed positions relative to each other (same for every execution)
  - Trait objects have the layout `{ data: *mut _, vtable: *mut _ }`
  - Vtables have the layout `{ destructor: fn(_), size: usize, alignment: usize, ... }`
  - A POSIX system with either `/dev/random` or `/dev/null` (it shouldn't be too hard to port this to other platforms)
  - 64-bit pointers (not entirely necessary, but 32-bit pointers would make it easier to exploit)

If [Rust adds support for `#[repr(align = "N")]`](https://github.com/rust-lang/rust/issues/33626), it may be possible to use a custom alignment as a secondary sanity check.