字符串格式
本章节阐述了 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@address}
将开始在 address
以十六进制显示 size
个字节。
{winerror@code}
将显示窗口错误代码的名称(用 GetLastError()
返回)及其描述(用FormatMessage
)。它类似于 ErrLookup 实用程序。
{ntstatus@code}
将显示 NTSTATUS 错误代码的名称及其描述(用 FormatMessage
)。
{ascii[;length]@address}
将在 address
用可选的 length
(以字节)显示 ASCII 字符串。
{ansi[;length]@address}
将在 address
用可选的 length
(以字节)显示 ANSI 字符串。
{utf8[;length]@address}
将在 address
用可选的 length
(以字节)显示 UTF-8 字符串。
{utf16[;length]@address}
将在 address
用可选的 length
(以字)显示 UTF-16 字符串。
{disasm@address}
将在 address
显示反汇编(等于{i:address}
)。
{modname@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@expression}
在此 type
是函数注册的名称,argN
是任何字符串(这些都作为参数传递给格式化函数),以及expression
是任何有效的表达。