<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>TBlog</title><description>A collection of tools I built</description><link>https://tinysec.net/</link><item><title>tdrive</title><link>https://tinysec.net/tool/tdrive/</link><guid isPermaLink="true">https://tinysec.net/tool/tdrive/</guid><description>Turn any directory into a private web drive with HTTP, WebDAV, and FTP access — one static binary, no database.</description><pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;article&gt; &lt;header&gt; &lt;h1&gt;tdrive&lt;/h1&gt; &lt;div&gt; &lt;a href=&quot;https://tinysec.net/?q=go&quot;&gt;
#go &lt;/a&gt;&lt;a href=&quot;https://tinysec.net/?q=self-hosted&quot;&gt;
#self-hosted &lt;/a&gt;&lt;a href=&quot;https://tinysec.net/?q=file-server&quot;&gt;
#file-server &lt;/a&gt;&lt;a href=&quot;https://tinysec.net/?q=webdav&quot;&gt;
#webdav &lt;/a&gt;&lt;a href=&quot;https://tinysec.net/?q=ftp&quot;&gt;
#ftp &lt;/a&gt; &lt;/div&gt; &lt;p&gt;Turn any directory into a private web drive with HTTP, WebDAV, and FTP access — one static binary, no database.&lt;/p&gt;  &lt;div&gt; &lt;a href=&quot;https://github.com/tinysec/tdrive/releases/download/v0.1.2/tdrive-windows-amd64.zip&quot;&gt;  Windows amd64 &lt;/a&gt;&lt;a href=&quot;https://github.com/tinysec/tdrive/releases/download/v0.1.2/tdrive-linux-amd64.tar.gz&quot;&gt;  Linux amd64 &lt;/a&gt; &lt;/div&gt; &lt;/header&gt; &lt;section&gt; &lt;img src=&quot;https://tinysec.net/_astro/screenshot.DT9UwtLT_2fEoHQ.webp&quot; alt=&quot;tdrive screenshot 1&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;800&quot; /&gt; &lt;/section&gt; &lt;section&gt; &lt;p&gt;tdrive turns an ordinary directory into a personal file service. Point it at a
folder, start one binary, and the same files are immediately available through
a polished web interface, WebDAV, optional FTP, and a REST API.&lt;/p&gt;
&lt;p&gt;There is no database to migrate, no configuration file to maintain, and no
frontend toolchain to install. Your files stay as normal files on disk, so
backups, scripts, editors, and command-line tools can keep working with them
directly.&lt;/p&gt;
&lt;h2 id=&quot;a-lightweight-drive-that-still-feels-complete&quot;&gt;A lightweight drive that still feels complete&lt;/h2&gt;
&lt;p&gt;The browser interface is designed for everyday file work rather than being a
thin directory listing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Filter the current folder instantly, sort by column, and switch between list
and thumbnail grids.&lt;/li&gt;
&lt;li&gt;Upload from the toolbar or drag files into the browser. Large uploads are
chunked, while downloads stream with HTTP range support.&lt;/li&gt;
&lt;li&gt;Preview images and HTML, and render Markdown with GFM, Mermaid, KaTeX, and
syntax highlighting.&lt;/li&gt;
&lt;li&gt;Edit text files in place, create folders and files without modal dialogs, and
use familiar keyboard shortcuts.&lt;/li&gt;
&lt;li&gt;Select multiple entries for batch operations, drag items between folders, or
use the context menu to rename, delete, download, and copy a raw URL.&lt;/li&gt;
&lt;li&gt;Switch the interface between 中文 and English.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;one-directory-several-access-methods&quot;&gt;One directory, several access methods&lt;/h2&gt;
&lt;p&gt;Every interface operates on the same filesystem tree:&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Interface&lt;/th&gt;&lt;th&gt;Address&lt;/th&gt;&lt;th&gt;Best for&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Web UI and HTTP&lt;/td&gt;&lt;td&gt;&lt;code&gt;http://host:3000/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Browsing, previewing, editing, and sharing links&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;WebDAV&lt;/td&gt;&lt;td&gt;&lt;code&gt;http://host:3000/webdav/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Mounting the directory in an OS or file manager&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;FTP&lt;/td&gt;&lt;td&gt;Enabled with &lt;code&gt;--ftp-port&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Existing FTP clients and LAN workflows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;REST API&lt;/td&gt;&lt;td&gt;&lt;code&gt;/api/v1&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Scripts and integrations&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Raw files&lt;/td&gt;&lt;td&gt;&lt;code&gt;/raw/&amp;lt;path&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Stable direct URLs and nginx-style folder indexes&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The storage layer is confined with Go’s &lt;code&gt;os.Root&lt;/code&gt;: path traversal and symbolic
links cannot escape the directory you chose to serve. A read-only mode can
disable every upload, edit, move, and delete operation across all protocols.&lt;/p&gt;
&lt;h2 id=&quot;start-in-seconds&quot;&gt;Start in seconds&lt;/h2&gt;
&lt;p&gt;Serve the current directory on port 3000:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot;&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;tdrive&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Serve a dedicated folder and require a password:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot;&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;tdrive&lt;/span&gt;&lt;span&gt; /srv/files&lt;/span&gt;&lt;span&gt; --port&lt;/span&gt;&lt;span&gt; 3000&lt;/span&gt;&lt;span&gt; --password&lt;/span&gt;&lt;span&gt; &quot;choose-a-strong-password&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add FTP access for clients that need it:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot;&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;tdrive&lt;/span&gt;&lt;span&gt; /srv/files&lt;/span&gt;&lt;span&gt; --password&lt;/span&gt;&lt;span&gt; &quot;choose-a-strong-password&quot;&lt;/span&gt;&lt;span&gt; --ftp-port&lt;/span&gt;&lt;span&gt; 2121&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For a local-only workspace, bind it to the loopback interface:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot;&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;tdrive&lt;/span&gt;&lt;span&gt; ~/files&lt;/span&gt;&lt;span&gt; --host&lt;/span&gt;&lt;span&gt; 127.0.0.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By default tdrive listens on all interfaces without authentication. Set
&lt;code&gt;--password&lt;/code&gt;, use &lt;code&gt;--host 127.0.0.1&lt;/code&gt;, or place it behind an authenticated HTTPS
reverse proxy before exposing it outside a trusted network.&lt;/p&gt;
&lt;h2 id=&quot;where-it-fits&quot;&gt;Where it fits&lt;/h2&gt;
&lt;p&gt;tdrive is useful when a full NAS platform is more machinery than the job needs:
a private download box, a temporary project share, a small home-server drive,
a browsable folder on a development machine, or a read-only archive with clean
direct links.&lt;/p&gt;
&lt;p&gt;The current release provides native amd64 packages for Windows and Linux. Source
code, issue tracking, and release history are available in the
&lt;a href=&quot;https://github.com/tinysec/tdrive&quot;&gt;tdrive GitHub repository&lt;/a&gt;.&lt;/p&gt; &lt;/section&gt; &lt;/article&gt; </content:encoded><category>software</category><category>storage</category><category>go</category><category>self-hosted</category><category>file-server</category><category>webdav</category><category>ftp</category></item><item><title>windbg-ctype</title><link>https://tinysec.net/tool/windbg-ctype/</link><guid isPermaLink="true">https://tinysec.net/tool/windbg-ctype/</guid><description>A WinDbg extension that parses C headers and dumps memory as those types — like dt, but for types that were never in any PDB.</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;article&gt; &lt;header&gt; &lt;h1&gt;windbg-ctype&lt;/h1&gt; &lt;div&gt; &lt;a href=&quot;https://tinysec.net/?q=windbg&quot;&gt;
#windbg &lt;/a&gt;&lt;a href=&quot;https://tinysec.net/?q=windows&quot;&gt;
#windows &lt;/a&gt;&lt;a href=&quot;https://tinysec.net/?q=reverse-engineering&quot;&gt;
#reverse-engineering &lt;/a&gt;&lt;a href=&quot;https://tinysec.net/?q=c&quot;&gt;
#c &lt;/a&gt; &lt;/div&gt; &lt;p&gt;A WinDbg extension that parses C headers and dumps memory as those types — like dt, but for types that were never in any PDB.&lt;/p&gt;  &lt;div&gt; &lt;a href=&quot;https://github.com/tinysec/windbg-ctype/releases/download/v0.1.0.65/ctype-amd64-v0.1.0.65.zip&quot;&gt;  Windows amd64 &lt;/a&gt;&lt;a href=&quot;https://github.com/tinysec/windbg-ctype/releases/download/v0.1.0.65/ctype-i386-v0.1.0.65.zip&quot;&gt;  Windows i386 &lt;/a&gt; &lt;/div&gt; &lt;/header&gt; &lt;section&gt; &lt;img src=&quot;https://tinysec.net/_astro/ctype.BX07vk4O_1GahMf.webp&quot; alt=&quot;windbg-ctype screenshot 1&quot; loading=&quot;lazy&quot; width=&quot;1328&quot; height=&quot;1166&quot; /&gt; &lt;/section&gt; &lt;section&gt; &lt;p&gt;&lt;code&gt;dt&lt;/code&gt; is one of the most useful commands in WinDbg, but it only knows the types
that are baked into the loaded PDBs. The moment you are staring at memory whose
symbols you do not have — a third-party driver, an undocumented OS structure, a
packet you only have a header for — &lt;code&gt;dt&lt;/code&gt; has nothing to say.&lt;/p&gt;
&lt;p&gt;windbg-ctype closes that gap. You give it a C header, it parses the declarations
itself, and from then on you can walk memory through those types exactly the way
&lt;code&gt;dt&lt;/code&gt; walks symbol types — even though the debugger has never seen a matching PDB.&lt;/p&gt;
&lt;h2 id=&quot;what-it-does&quot;&gt;What it does&lt;/h2&gt;
&lt;p&gt;The extension carries a small C parser. &lt;code&gt;!loadc&lt;/code&gt; reads a header, resolves the
type layout (the same rules the compiler would apply), and registers every
struct, union, enum, and typedef it finds. After that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;!dt&lt;/code&gt; prints a type the way the built-in &lt;code&gt;dt&lt;/code&gt; does — field names, offsets, and
the WinDbg type of each field; pass an address and it reads and prints the
values there too. The layout output matches WinDbg’s own &lt;code&gt;dt&lt;/code&gt; for the same
type, so it drops straight into the workflow you already have.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!dtc&lt;/code&gt; prints the type back as a C declaration, optionally annotated with
offsets, which is handy when you want to paste a struct into your own code or
sanity-check what the parser actually understood.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It handles the parts of C that real headers actually use: nested structs and
unions, anonymous members, bitfields, fixed arrays, pointers and function
pointers, enum-typed fields, &lt;code&gt;#pragma pack&lt;/code&gt;, and explicit alignment via
&lt;code&gt;__declspec(align(N))&lt;/code&gt; or &lt;code&gt;alignas(N)&lt;/code&gt;. Include directories (&lt;code&gt;-I&lt;/code&gt;) and
preprocessor defines (&lt;code&gt;-D&lt;/code&gt;) are passed through, and &lt;code&gt;-p&amp;lt;N&amp;gt;&lt;/code&gt; overrides the
default pack so you can match whatever the target was compiled with.&lt;/p&gt;
&lt;p&gt;Anything it does not own — a module-qualified name like &lt;code&gt;nt!_EPROCESS&lt;/code&gt;, a
wildcard, or a type it never loaded — is forwarded to the built-in &lt;code&gt;dt&lt;/code&gt;, so you
never lose the normal behaviour by having the extension loaded.&lt;/p&gt;
&lt;h2 id=&quot;commands&quot;&gt;Commands&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-light&quot;&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;!loadc &amp;lt;path&amp;gt; [-p&amp;lt;N&amp;gt;] [-I &amp;lt;dir&amp;gt;]... [-D NAME[=VALUE]]...   load a header&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;!listc                                                     list loaded types&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;!clearc                                                    drop all loaded types&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;!dt [opts] &amp;lt;type&amp;gt; [field] [address]                        dt-style listing&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;!dtc [-v] &amp;lt;type&amp;gt; [address]                                 C declaration output&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;!help                                                      reference + build info&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;example&quot;&gt;Example&lt;/h2&gt;
&lt;p&gt;Say you have this header:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot;&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;// C:\headers\types.h&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; Scalars&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    char&lt;/span&gt;&lt;span&gt; c;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    unsigned&lt;/span&gt;&lt;span&gt; char&lt;/span&gt;&lt;span&gt; uc;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    short&lt;/span&gt;&lt;span&gt; s;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    unsigned&lt;/span&gt;&lt;span&gt; short&lt;/span&gt;&lt;span&gt; us;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    int&lt;/span&gt;&lt;span&gt; i;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    unsigned&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt; ui;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    long&lt;/span&gt;&lt;span&gt; long&lt;/span&gt;&lt;span&gt; ll;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    float&lt;/span&gt;&lt;span&gt; f;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    double&lt;/span&gt;&lt;span&gt; d;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    void*&lt;/span&gt;&lt;span&gt; p;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    wchar_t&lt;/span&gt;&lt;span&gt; w;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; Bits&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    unsigned&lt;/span&gt;&lt;span&gt; long&lt;/span&gt;&lt;span&gt; a : &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    unsigned&lt;/span&gt;&lt;span&gt; long&lt;/span&gt;&lt;span&gt; b : &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    unsigned&lt;/span&gt;&lt;span&gt; long&lt;/span&gt;&lt;span&gt; c : &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    unsigned&lt;/span&gt;&lt;span&gt; long&lt;/span&gt;&lt;span&gt; d : &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Load the extension, load the header, and list a type:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot;&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;0:000&amp;gt; .load C:\tools\ctype\ctype.dll&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;0:000&amp;gt; !loadc C:\headers\types.h&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;!loadc: loaded 2 type(s) from file:C:\headers\types.h (target pointer_size=8)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;0:000&amp;gt; !dt Scalars&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x000 c                : Char&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x001 uc               : UChar&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x002 s                : Int2B&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x004 us               : Uint2B&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x008 i                : Int4B&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x00c ui               : Uint4B&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x010 ll               : Int8B&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x018 f                : Float&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x020 d                : Float&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x028 p                : Ptr64 Void&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x030 w                : Wchar&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The offsets are the real layout the compiler would produce — note how &lt;code&gt;ll&lt;/code&gt;
lands at &lt;code&gt;+0x010&lt;/code&gt; after the 4-byte padding behind &lt;code&gt;ui&lt;/code&gt;. Bitfields are reported
the same way &lt;code&gt;dt&lt;/code&gt; reports them:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot;&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;0:000&amp;gt; !dt Bits&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x000 a                : Pos 0, 1 Bit&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x000 b                : Pos 1, 2 Bits&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x000 c                : Pos 3, 5 Bits&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   +0x000 d                : Pos 8, 24 Bits&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;!dtc&lt;/code&gt; prints the same type back as a C declaration, with &lt;code&gt;-v&lt;/code&gt; adding the
offset of each field:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot;&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;0:000&amp;gt; !dtc Scalars&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// size is 0x38 (56)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;struct Scalars&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    char           c;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    unsigned char  uc;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    short          s;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    unsigned short us;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    int            i;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    unsigned int   ui;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    long long      ll;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    float          f;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    double         d;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    void*          p;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    wchar_t        w;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pass an address after the type name (&lt;code&gt;!dt Scalars &amp;lt;address&amp;gt;&lt;/code&gt;) and it reads and
prints the values living there, just like &lt;code&gt;dt&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;requirements&quot;&gt;Requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Windows, with the Debugging Tools for Windows (WinDbg / &lt;code&gt;cdb&lt;/code&gt; / &lt;code&gt;kd&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The DLL architecture must match the debugger architecture: load the &lt;strong&gt;amd64&lt;/strong&gt;
build in 64-bit WinDbg and the &lt;strong&gt;i386&lt;/strong&gt; build in 32-bit WinDbg. Loading the
wrong one fails with an architecture-mismatch error.&lt;/li&gt;
&lt;li&gt;No network access and no symbol server are involved — the only input is the
header you point it at.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;install&quot;&gt;Install&lt;/h2&gt;
&lt;p&gt;Unzip the build for your debugger’s architecture and load &lt;code&gt;ctype.dll&lt;/code&gt; from
wherever you put it:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-light&quot;&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;.load C:\tools\ctype\ctype.dll&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;!help&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;!help&lt;/code&gt; prints the version, the commit it was built from, and the command list,
so you can always tell which build you are running.&lt;/p&gt; &lt;/section&gt; &lt;/article&gt; </content:encoded><category>software</category><category>debugging</category><category>windbg</category><category>windows</category><category>reverse-engineering</category><category>c</category></item></channel></rss>