一、简介
这是x32/64 dbg帮助手册中引言部分的内容,为了防止使用工具时找不到资料,特来此备份一下;
二、引言 - 输入
使用 x64dbg 时,通常可以使用各种内容作为输入。
命令
命令有下列格式:
command arg1, arg2, argN
变量
变量可选择用 $
开始,并只可以存储为一个“双字”(x64 为“四字”)。
寄存器
所有的寄存器(所有大小)可以用来作为变量。
备注
大多数寄存器的变量名称与它们的名称相同,但以下寄存器例外:
x87 控制字标志:该寄存器的标志被这样命名:_x87CW_UM
除了在架构中的寄存器外,x64dbg 还提供下列寄存器:CAX
、CBX
、CCX
、CDX
、CSP
、CBP
、CSI
、CDI
、CIP
。这些寄存器在 32-位平台上被映射到 32-位寄存器,而在 64-位平台上被映射到 64-位寄存器。例如,CIP
在 32-位平台是 EIP
,而在 64-位平台是 RIP
。该功能为了能支持独立于体系结构的代码。
存储单元
你可以通过使用下列表达式之一,从或到一个存储单元进行读取/写入:
[addr]
从 addr
读取一个双字/四字。
n:[addr]
从 addr
读取 n 个字节。
seg:[addr]
在 addr
从一个段读取一个双字/四字。
byte:[addr]
从 addr
读取一个字节。
word:[addr]
从 addr
读取一个字。
dword:[addr]
从 addr
读取一个双字。
qword:[addr]
从 addr
读取一个四字(仅 x64)。
备注
n
是要读取字节的总数,在指定时这可以是任何小于4 (在x32) 和小于8 (在x64)的数字,否则将出错。
seg
可以是 gs
、es
、cs
、fs
、ds
、ss
。仅 fs 和 gs 有作用。
标志
调试标志(解释为整数)可以被用来作为输入。标志是带有一个 _
跟随标志名称的前缀。有效的标志是:_cf
, _pf
, _af
, _zf
, _sf
, _tf
, _if
, _df
, _of
, _rf
, _vm
, _ac
, _vif
, _vip
和 _id
。
数字
按默认情况,所有数字都解释为十六进制!如果要确认,你可以用 x
或0x
作为前缀。前面带有一个点的数字,可以用作为十进制数字:.123=7B
。
标签/符号
自定义标签和符号是一个有效的表达式(它们解析上述标签/符号的地址)。
模块数据
DLL 导出
输入 GetProcAddress
,那么它将自动解析函数的实际地址。若要明确定义来自要加载 API 的模块,可使用:[module].dll:[api]
或 [module]:[api]
。用类似的方式,你可以尝试用 [module]:[ordinal]
解析序数。另一个宏,可以获取加载模块的基础。例如,当 [module]
是一个空串 :GetProcAddress
时,则当前在 CPU 中选定的模块将被使用。
已加载的模块库
如果要访问加载的模块库,可以写入: [module]:0, [module]:base, [module]:imagebase
或 [module]:header
。
RVA/文件偏移量
如果你要访问模块 RVA,你可以写入 [module]:0+[rva] 或
[module]
:$[rva]
任何一个。如果你要转换一个文件偏移量为 VA,你可以使用 [module]:#[offset]。例如,当 [module]
是一个空串 :0
时,则当前在 CPU 中选定的模块将被使用。
模块入口点
若要访问模块入口点,你可以写入 [module]:entry、[module]:oep
或 [module]:ep
。备注,当用名称 entry
、oep
或 ep
这些地址导出时,将被返回代替。
备注
你也可以使用一个 .
来代替该 :
定界符。如果你需要查询模块信息如 [module]:imagebase
或 [module]:entry
,你可以考虑使用 ?
作为定界符替代: [module]?entry
。该 ?
定界符稍后会指定导出检查,所以当在模块中有一个导出调用 entry
时,它仍然会工作。