ktest-parser 0.1.1

Parse KTest binaries (.ktest)
Documentation
# ktest-parser
[![Crate](https://img.shields.io/crates/v/klee-rs)](https://crates.io/crates/klee-rs)
[![Crate](https://img.shields.io/docsrs/ktest-parser)](https://docs.rs/ktest-parser)
ktest-parser is a utility to parse `.ktest` binaries which is the output of KLEE, into a Rust friendly struct instead.

## KTest File Format Description
The KTest binary is structured as follows, 
1. A header 
2. KLEE arguments 
3. Symbolic arguments
4. KTest objects.

The following sections describes the detailed structure. Each new section starts at byte 0 here, but they follow each other. E.g. the Arguments section start at byte 8 where the Header section left off. But it is easier to describe the structure this way.

### Header
The header describes the magic number which is either "KTEST" or "BOUT/n". Then followed
by a version of the file format.
| BYTE | NAME    | DESCRIPTION                 | LENGTH  |
|------|---------|-----------------------------|---------|
| 0..5 | HDR     | File format (default: KTEST)| 4 bytes |
| 5..8 | VERSION | File format version         | 4 bytes |

### Arguments
The arguments section describes the number of arguments and then a repeated section of
arguments where each argument is first described by a size and then its content of size length.
#### Information
| BYTE | NAME   | DESCRIPTION                 | LENGTH  |
|------|--------|-----------------------------|---------|
| 0..4 | NUMARGS| Number of arguments         | 4 bytes |

#### Argument
This is repeated for (NUMARGS) times.
| BYTE        | NAME   | DESCRIPTION      | LENGTH       |
|-------------|--------|------------------|--------------|
| 0..4        | SIZE   | Size of argument | 4 bytes      |
| 4..(4+SIZE) | ARG    | An argument      | (SIZE) bytes |        

### Symbolic arguments
Describes symbolic arguments.
| BYTE | NAME    | DESCRIPTION | LENGTH  |
|------|---------|-------------|---------|
| 0..4 | ARGVS   | none        | 4 bytes |
| 4..8 | ARGVLEN | none        | 4 bytes |

### Objects
Like the arguments section, the first item is the number of objects. Then followed by
a repeated section of objects where each object is described by a size and then its content
of size length.
#### Information
| BYTE | NAME      | DESCRIPTION       | LENGTH  |
|------|-----------|-------------------|---------|
| 0..4 | NUMOBJECTS| Number of objects | 4 bytes |

#### Object
This is repeated for (NUMOBJECTS) times.
| BYTE        | NAME   | DESCRIPTION    | LENGTH       |
|-------------|--------|----------------|--------------|
| 0..4        | SIZE   | Size of object | 4 bytes      |
| 4..(4+SIZE) | OBJECT | An object      | (SIZE) bytes |

## License
Licensed under BSD-3. See [LICENSE](/LICENSE).

### Contributing
Issues and pull requests are welcomed! See [CONTRIBUTING.md](/CONTRIBUTING.md).