字符串格式

本章节阐述了 x64dbg 中内置的简单字符串格式。

基本语法是 {?:expression},此处 ? 是表达式可选的类型。默认类型是 x。若要在结果中输出 {},可将它们转义为 {{}}

类型

  • d 带符号的十进制数:-3
  • u 无符号的十进制数:57329171
  • p 前缀带零的指针:0000000410007683
  • s 字符串指针:this is a string
  • x 十六进制3C28A
  • a 地址信息:00401010 <module.EntryPoint>
  • i 指令文本:jmp 0x77ac3c87

复杂类型

{mem;size&#64;address} 将开始在 address 以十六进制显示 size 个字节。

{winerror&#64;code} 将显示窗口错误代码的名称(用 GetLastError() 返回)及其描述(用FormatMessage)。它类似于 ErrLookup 实用程序。

{ntstatus&#64;code} 将显示 NTSTATUS 错误代码的名称及其描述(用 FormatMessage)。

{ascii[;length]&#64;address} 将在 address 用可选的 length (以字节)显示 ASCII 字符串。

{ansi[;length]&#64;address} 将在 address 用可选的 length (以字节)显示 ANSI 字符串。

{utf8[;length]&#64;address} 将在 address 用可选的 length (以字节)显示 UTF-8 字符串。

{utf16[;length]&#64;address} 将在 address 用可选的 length (以字)显示 UTF-16 字符串。

{disasm&#64;address} 将在 address 显示反汇编(等于{i:address})。

{modname&#64;address} 将在 address 显示模块名称。

{bswap[;size]@value} 将字节交换 value 为指定的 size (每个默认值的指针大小)。

示例

  • rax: {rax} 格式为 rax: 4C76
  • password: {s:4*ecx+0x402000} 格式为 password: L"s3cret"
  • {x:bswap(rax)}rax=0000000078D333E0 格式为 E033D37800000000 因为 bswap fun 可以反转十六进制值
  • {bswap;4@rax}rax=1122334455667788 格式为 88776655

日志记录

使用 log 命令时,应在格式字符串 (log "{mem;8@rax}") 周围加引号以免与 ; (分隔两个命令的)混淆。更多详细资料请参见 https://github.com/x64dbg/x64dbg/issues/1931

插件

插件可使用 _plugin_registerformatfunction 注册自定义字符串格式化函数。语法是 {type;arg1;arg2;argN&#64;expression} 在此 type 是函数注册的名称,argN 是任何字符串(这些都作为参数传递给格式化函数),以及expression 是任何有效的表达。