# RecStruct — Artifact Package

This artifact accompanies the paper *"RecStruct: Recovering Nested Struct Types from Stripped Binaries via Stack-Driven Unification"* submitted to USENIX Security '26.

## Contents

- `RecStruct-source.tar.gz`: Source code for RecStruct and evaluation tools
- `RecStruct-dataset.tar.gz`: Benchmark datasets with ground truth

## Source Code (`RecStruct-source.tar.gz`)

Contains:

- `struct-recover-rs/` — RecStruct analysis tool
- `struct-recover-eval/` — Evaluation framework

## Dataset (`RecStruct-dataset.tar.gz`)

Benchmark datasets used in the paper's evaluation:

| Dataset | Description |
|---------|-------------|
| `coreutils-O1` | GNU Coreutils compiled with `-O1` |
| `coreutils-O2` | GNU Coreutils compiled with `-O2` |
| `coreutils-O3` | GNU Coreutils compiled with `-O3` |
| `binutils` | GNU Binutils |
| `utils` | Miscellaneous utilities |
| `qemu` | QEMU emulator |
| `openssl` | OpenSSL library |

Each dataset directory contains:
- `bin/` — Compiled binaries with debug symbols (for ground truth extraction)
- `strip/` — Stripped binaries (analysis targets)
- `groundtruth.yaml` — Ground truth type definitions extracted from DWARF

## Building

### Prerequisites

- Rust 1.88+ (edition 2024)
- Linux x86-64 environment

### Build RecStruct

```bash
cd struct-recover-rs
cargo build --release
```

Binary produced at: `struct-recover-rs/target/release/stride`

### Build Evaluation Tools

```bash
cd struct-recover-eval/tools
cargo build --release
```

## Quick Start

A smoke test to verify the artifact builds and runs correctly:

```bash
cd struct-recover-rs
cargo build --release
cd target/release
./stride pipeline --bin ../../testcase/old-case --mode full --output ./output
```

## Dataset-Scale Evaluation

Run RecStruct on a full dataset (e.g., `coreutils-O1`):

```bash
cd struct-recover-eval/tools
cargo run --release --bin run-dataset -- \
    --dataset ../dataset/coreutils-O1 \
    --variant baseline-ae
```

By default, this invokes the `stride` binary at `../struct-recover-rs/target/release/stride`. Use `--stride` to specify an alternative path.

Evaluate the results:

```bash
cd struct-recover-eval/tools
cargo run --release --bin run-eval -- \
    --dataset ../dataset/coreutils-O1 \
    --results ../results/coreutils-O1-stride-baseline-ae
```

## License

- **Source code**: Apache License 2.0. See [`RecStruct/LICENSE`](RecStruct/LICENSE).
- **Dataset binaries**: The dataset contains pre-built binaries from coreutils, binutils, grep, gzip, lighttpd, wget, qemu, and openssl. These binaries are subject to their respective upstream licenses.
- **Dataset ground truth** (`groundtruth.yaml`): [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
