内存读取
[addr] 读取DWORD / QWORD
n:[addr] 从addr开始读取n个字节
seg:[addr] 段寄存器加偏移读取DWORD / QWORD seg
可以gs
,es
,cs
,fs
,ds
,ss
byte:[addr] 读取BYTE
word:[addr] 读取word
dword:[addr] 读取dword
qword:[addr] 读取qword
字节/字/双字/四字/指针(ptr)
ReadByte,Byte,byte(addr):从 addr 读取一个字节,并返回该值。
ReadWord,Word,word(addr):从 addr 读取一个字(2字节),并返回该值。
ReadDword,Dword,dword(addr):从 addr 读取双字(4字节),并返回该值。
ReadQword,Qword,qword(addr):从 addr 读取四字(8字节),并返回该值(仅用于x64)。
ReadPtr,ReadPointer,ptr,Pointer,pointer(addr):从 addr 读取一个指针(4/8 字节),并返回该值。
数字
默认情况下,所有数字都解释为十六进制!如果要指定,可以x
或0x
作为前缀。十进制数可以通过在数字前加点号来使用.123=7B
模块数据
键入GetProcAddress,
它将自动解析为函数的实际地址。要明确定义从哪个模块加载API,请使用:[module].dll:[api]
或[module]:[api]
。当[module]
为空字符串时:GetProcAddress
,将使用CPU中当前选择的模块。
加载的模块基地
如果您要访问加载模块的基地址,你可以写:[module]:0
,[module]:base
,[module]:imagebase
或[module]:header
RVA /文件偏移量
如果要访问模块RVA,则可以写[module]:0+[rva]
,也可以写[module]:$[rva]
。如果要将文件偏移量转换为VA,可以使用[module]:#[offset]
。例如,当[module]
为空字符串时,将使用CPU中当前选择的模块
模块的入口点
要访问一个模块的入口点,你可以写[module]:entry
,[module]:oep
或[module]:ep
。请注意,当有名称为的导出时entry
,oep
否则ep
将返回这些地址
表达式
调试器允许使用基本表达式。只需在命令窗口中键入一个表达式,结果就会显示在控制台中。除了计算之外,它还允许使用类似C的语法快速更改变量
- 括号:
(1+2)
,[1+6]
比其他操作优先。 - 一元减/二进制非/逻辑非:(
-1
负1),~1
(二进制非1),!0
(逻辑非0)。 - 乘法/除法:(
2*3
常规乘法),2`3
(得到乘法的高分),6/3
(常规除法),5%3
(除法的模/余数)。 - 加法/减法:(
1+3
加法),5-2
(减法)。 - 左/右移位/旋转:(
1<<2
向左移位,shl表示无符号,sal表示有符号),10>>1
(向右移位,shl表示无符号,sal表示有符号),1<<<2
(向左旋转),1>>>2
(向右旋转)。 - 小(相等)/大(等于):
4<10
,3>6
,1<=2
,6>=7
(如果真解析为1,0,如果假)。 - 等于/不等于:
1==1
,2!=6
(如果为true,则解析为1;如果为false,则解析为0)。 - 二进制和:(
12&2
常规二进制和)。 - 二进制异或:(
2^1
常规二进制异或)。 - 二进制或:(
2|8
常规二进制或)。 - 逻辑和:(
0&&3
如果为true,则解析为1;如果为false,则解析为0)。 - 逻辑或:(
0||3
如果为true,则解析为1;如果为false,则解析为0)。 - 逻辑含义:(
0->1
如果为true,则解析为1;如果为false,则解析为0)
处理信息
peb()
:获取PEB地址。teb()
:获取TEB地址。tid()
:获取当前线程ID