VSDUMP(1)
π 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 == 15is used for streams that contain'Page'data.Type == 23is 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
- ubuntu jammy: vsdump 0.0.45-1build1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms