字符串格式

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

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

类型

  • d 带符号的十进制数:-3
  • u 无符号的十进制数:57329171
  • p 前缀带零的指针:0000000410007683
  • s 字符串指针:this is a string
  • x 十六进制: 3C28A (整数值的默认值)
  • a 地址信息:00401010 <module.EntryPoint>
  • i 指令文本:jmp 0x77ac3c87
  • f 单精度浮点指针或寄存器: 如果 10001234 是单个精度浮点数 3.14 的地址,则 {f:10001234} 将打印 3.14。它还可以接受 XMM 和 YMM 寄存器: {f:XMM0} 在 XMM0 位 31:0 处打印单精度浮点数,{f:YMM7[7]} 在 YMM7 位 255:224 处打印单精度浮点数。目前不支持 x87 和 AVX-512 寄存器。
  • F 双精度浮点指针或寄存器: 类似于 f,但数据被解释为双精度浮点数。它还可以接受 XMM 和 YMM 寄存器: {F:YMM7[3]} 在 YMM7 位 255:192 处打印双精度浮点数。

注意: XMM 和 YMM 寄存器只能与 f/F 浮点类型一起使用。(第2826期链接到有关原因的详细信息)

复杂类型

  • {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 (每个默认值的指针大小)。
  • {label&#64;address} 将打印 (自动)标签在 address
  • {comment&#64;address} 将打印 (自动)注释在 address

示例

  • rax: {rax} 格式为 rax: 4C76
  • password: {s:4*ecx+0x402000} 格式为 password: L"s3cret"
  • function type: {mem;1&#64;[ebp]+0xa} 格式为 function type: 01
  • {x:bswap(rax)}rax=0000000078D333E0 格式为 E033D37800000000 因为 bswap fun 可以反转十六进制值
  • {bswap;4@rax}rax=1122334455667788 格式为 88776655
  • mnemonic: {dis.mnemonic(dis.sel())} 格式为 mnemonic: push

日志记录

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

插件

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