Difference between revisions of "GSD"
Line 13: | Line 13: | ||
* 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 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. | ||
=== Footer === | |||
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. | |||
{| border="1" cellspacing="0" cellpadding="5" align="center" | |||
!Header | |||
!Description | |||
|- | |||
|01 | |||
|1-byte data chunks | |||
|- | |||
|02 | |||
|2-byte data chunks | |||
|- | |||
|03 | |||
|4-byte data chunks | |||
|- | |||
|05 | |||
|ASCII data chunks | |||
|} | |||
{| border="1" cellspacing="0" cellpadding="5" align="center" | |||
|+Sample Block Data | |||
!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 | |||
|} | |||
====Footer==== | |||
{| border="1" cellspacing="0" cellpadding="5" align="center" | |||
!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> | |||
|} |
Revision as of 08:22, 4 November 2009
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> |