GSD
The GSD binary file format
This is my first try to reverse engineer a binary file format. If you like, you could add your thoughts! By comparison between different files with the extention .gsd i try to see what data is stored where. It has some parts in ansi-text and the most parts are just binary numbers of different length. As identification, the file starts with the text "GRAPHTEC PRT&CUT". The next line at offset 0000:0010 starts with binary numbers "03 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00" (I don't know if they make any sense there).
- From offset 0000:0080 to offset 0000:00cf is unknown binary data.
- From offset 0000:00d3 to offset 0000:00de is binary data, which is exactly repeated from offset 0000:00fb to 0000:0107. It starts with the hex numbers 40 6a 40 which seems to be a marker for file seek. It ends with 40 00 04. Inbetween those bytes is data which funktion is still unknown.
- Every object can have a different color in the 8bit-RGB-color-range. E.g. RGB(254,254,254), but most probably it is only black. RGB(0,0,0).
- The size of the canvas is written in pure ansi text. The value could be "ISO A4" or "Letter".
- The hex value 40 seems to be the delimiter between chunks of data of different length. Hex value ff ff ff semms to be a start delimiter and ff ff ff ff semms to be the end delimiter.
The footer is composed of several sections. A header portion, and several blocks of data. These blocks seem to be related to various configuration information, although the exact purpose is unknown. This is followed by a footer section of static length.
Header
54 bytes - unknown data
Blocks
The first two bytes of the block provide information on the purpose of the block. The following 2 bytes indicate the type of data and the number of data elements of that type.
Header | Description |
---|---|
01 | 1-byte data chunks |
02 | 2-byte data chunks |
03 | 4-byte data chunks |
05 | ASCII data chunks |
Prefix | Type | Length | Data |
---|---|---|---|
0x0108 | 05 | 13 | "Graphtec Craft ROBO" |
0x0208 | 05 | 13 | "Graphtec Craft ROBO" |
0x0408 | 05 | 06 | "Letter" (or whatever) |
0x0508 | 03 | 02 | 56 54 00 00 24 6D 00 00 (unk) |
0x1B08 | 01 | 01 | 00 |
0x2708 | 01 | 01 | 00 |
0x1A08 | 02 | 01 | 64 00 |
0x0908 | 01 | 01 | 00 |
0x0A08 | 03 | 01 | 00 00 00 00 |
0x0B08 | 03 | 01 | 00 00 00 00 |
0x0C08 | 01 | 01 | 00 |
0x0D08 | 03 | 01 | 00 00 00 00 |
0x2208 | 01 | 01 | 00 |
0x2008 | 01 | 01 | 00 |
0x2108 | 02 | 01 | 00 00 |
0x2308 | 02 | 01 | 01 00 |
0x2408 | 03 | 01 | 6F 08 00 00 |
0x2508 | 03 | 01 | EA 0A 00 00 |
0x2608 | 02 | 01 | 01 00 |
0x0808 | 02 | 01 | 00 00 |
0x0E08 | 01 | 01 | 00 |
0x0F08 | 01 | 01 | 01 |
0x1008 | 03 | 01 | 00 00 00 00 |
0x1E08 | 01 | 01 | 01 |
0x1F08 | 01 | 01 | 01 |
0x1108 | 01 | 01 | 00 |
0x1C08 | 03 | 01 | 00 00 00 00 |
0x1D08 | 03 | 01 | 00 00 00 00 |
0x1408 | 03 | 01 | 00 00 00 00 |
Length | Description |
---|---|
0x48 bytes | unknown |
1 byte | use registration mark (bool) |
15 bytes | unknown |
1 byte | unknown (0x01) |
8 bytes | registration mark size |
16 bytes | unknown |
8 bytes | origin X |
4 bytes | unknown |
8 bytes | origin Y |
3 bytes | unknown |
1 byte | show grid (boolean) |
8 bytes | Registration Mark distance 1-2 |
4 bytes | unknown |
8 bytes | Registration mark distance 1-3 |
22 bytes | unknown |
1 byte | grid type(0=line, 1=dot) |
5 bytes | unknown |
8 bytes | grid size |
4 bytes | unknown |
1 byte | snap to grid(bool) |
8 bytes | unknown |
<EOF> |