VSDUMP(1)

πŸ“¦ version 0.0.45, in ubuntu jammy

πŸ’– VSDUMP(1) πŸ’–

okay bestie, so this is the manual page for vsdump β€” it lives in the General Commands Manual section, and it's genuinely one of those chaotic little tools that's doing something kind of iconic under the hood. grab a strawberry πŸ“ and let's get into it.


✨ NAME ✨

vsdump β€” VSD/VSS file format reverse engineering. yeah. that's the whole vibe. 🧚


πŸŽ€ SYNOPSIS πŸŽ€

vsdump [SUBOPTIONS] FILE

like, you give it a suboption and a file. that's the deal. πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

okay so first things first: this page is just a brief lil rundown of the vsdump command. not the whole saga, just the highlights. 😌

vsdump is an ALT Linux (www.altlinux.ru) project all about VSD/VSS file format reverse engineering. no cap. and here's the tea: VSD/VSS is an OLE file. πŸ«– The main data is stored in a 'VisioDocument' file inside this OLE. The 'VisioDocument' file has a header with a version number and a pointer to the 1st stream. Pointers contain Type, Offset to the start, Length, and Format of stream. And the Format field has a 'compressed' flag β€” that's the 2nd least significant bit, iykyk. πŸ‘‘

Now, the Format values, because these matter fr fr:

  • Format == 0x4* is used for streams that contain some strings.
  • Format == 0x5* is used for streams that contain some pointers.
  • Format == 0xd* is used for streams made of chunks.

And the Type values, same energy:

  • Type == 15 is used for streams that contain 'Page' data.
  • Type == 23 is used for streams that contain Icons.
  • And so on. (yes, the manpage literally says "and so on", we love a mysterious queen πŸ’€)

To (de)compress some streams, Visio uses some version of the LZW algorithm with options different from other MS-Office applications. so like, don't assume it behaves like its cousins, okay? πŸ™ˆ

Those streams are made of chunks. Chunks start with a header that contains Type and Length fields. Most chunk types have mandatory fields and some of them have discretionary fields. The type of chunk implies an order and format of mandatory fields, and the place of start for discretionary fields (if any). it's giving "the type tells you the rules" energy. πŸ“œ

The discretionary fields are made of 'blocks'. Blocks start with length, type fields and index of variable it is linked to. Blocks are made of 'slices'. Every slice can be a single byte operation like "+" or "*", or a 'command' to put one/two bytes data or IEEE-754 fraction or string or name or function into formula. okay that's a lot but it all tracks, I promise. 🌈


πŸ’… SUBOPTIONS πŸ’…

A summary of options is included below. slay, here we go:

  • help β€” list subcommands. that's it, that's the whole job. 🫢
  • dump <file> [directory] β€” dump pointers and inflated streams. the directory is optional bestie, it's just chilling in brackets.
  • test <file> β€” test command table. go off, queen. πŸ”₯

πŸ‘‘ AUTHOR πŸ‘‘

vsdump was written by Valek Filippov (frob@df.ru). absolute legend. ✨

This manual page was written by Juan Angulo Moreno <juan@apuntale.com>, for the Debian project (but may be used by others). so generous of them fr. πŸ’œ


πŸ’– that's the whole page bestie!! go forth and reverse-engineer some VSD/VSS files, you main character. πŸ¦‹

this cutie was brought to you by the VSDUMP(1) source, dated jun 26, 2007 β€” yeah, it's vintage, and it ate. πŸŽ€ periodt.

πŸ“¦ where this page comes from