命令详解
执行控制
命令 | 命令含义 | 举例 |
---|---|---|
c | 继续执行,命令也可以写成cont或continue | |
s [count] | 执行指定数量的指令,count为数量,默认值是1,命令也可以写成step | s 2 |
s [cpu] [count] | 对于多CPU模拟器,在指定的CPU上执行指定数量的指令,命令也可以写成step | s 1 5 |
s all [count] | 对于多CPU模拟器,在所有CPU上执行指定数量的指令,也可以写成step all | s all 5 |
Ctrl-C 或 Ctrl-D | 对于正在执行的程序,是停止程序执行回到命令行;对于命令行,则是退出模拟器 | |
q 或 quit 或 exit | 在命令行中输入该命令,停止程序执行,退出模拟器 |
断点设置
断点设置涉及到段9seg)、偏移(off)、地址(addr)等概念,有如下三种形式:
十六进制:以0x开头
十进制:0~9的数字组成,开头数字非0
八进制:0~7的数字组成,且以0开头
命令 | 命令含义 | 举例 |
---|---|---|
vb seg:off | 也可以写成vbreak seg:off,表示针对虚拟地址段:偏移=seg:off设置断点 | vb 0x0000:0x7c00 |
vb seg:off if "expr" | 也可以写成vbreak seg:off if "expr",表示针对虚拟地址段:偏移=seg:off设置条件断点,条件为"expr" | |
lb addr | 也可以写成lbreak addr,表示针对线性地址addr设置断点 | lb 0x7c00 |
lb addr if "expr" | 也可以写成lbreak addr if "expr",表示针对线性地址addr设置条件断点 | |
b addr | 也可以写成break addr、pbreak addr、pb addr等形式,针对物理地址addr设置断点 | |
info break | 显示当前所有断点的状态 | |
bpe n | 使能断点n | |
bpd n | 禁止断点n | |
d n | 也可以写成delete n、del n,删除断点n |
内存观测
命令 | 命令含义 | 举例 |
---|---|---|
watch r addr | 也可以写成watch reda addr,表示在物理地址addr处插入一个读观测点,当该内存被读取的时候触发该观测点 | watch r 0x7c1b |
watch w addr | 也可以写成watch write addr,表示在物理地址addr处插入一个写观测点,当该内存被写入的时候触发该观测点 | |
watch | 显示当前所有内存观测点的状态 | |
watch stop | 观测点被触发后的行为:当触发观测点后,暂停模拟器运行,回到命令行等待输入(这也是watch观测点的默认行为) | |
watch continue | 观测点被触发后的行为:当触发观测点后,继续执行 | |
unwatch addr | 移除指定物理地址的观测点 | |
unwatch | 移除所有的观测点 | |
trace-mem on/off | 使能/禁止内存访问跟踪 |
内存操作
命令 | 命令含义 | 举例 |
---|---|---|
x /nuf addr | 按照指定的格式打印线性地址addr中的内容。n、u、f是三个格式选项。 n:指定待显示内存的单元数量,单元的大小由u指定 u:指定单元的大小,b表示字节、h表示字(2字节)、w表示双字(4字节)、g(8字节) f:指定打印格式,x表示以16进制打印、d表示以十进制打印、u表示以无符号十进制打印、o表示以八进制打印、t表示以二进制打印 |
x /16bx 0x7c00 表示打印0x7c00地址开始处的16字节内容 以16进制的方式打印 按照每个字节为一个显示单元,显示单元之间空格 |
xp /nuf addr | 与x /nuf addr的区别在于,xp命令打印的是指定的物理地址addr中的内容。 | |
setpmem addr datasize val | 将物理地址addr处开始的datasize字节设置为val值 | setpmem 0x7c1b 2 0x4141 |
writemem filename addr len | 从指定的线性地址开始,复制指定数量的内存字节数到文件 | writemem file.dat 0x7c1b 16 |
crc addr1 addr2 | 计算物理地址addr1-addr2之间的crc32值 |
信息查询
命令 | 命令含义 | 举例 |
---|---|---|
r | 列出CPU中的整数寄存器及其内容,该命令也可以写成reg、regs、registers | r |
fp | 列出所有FPU寄存器及其内容,该命令也可以写成fpu | |
mmx | 列出所有MMX寄存器及其内容 | |
sse | 列出所有SSE寄存器及其内容,该命令也可以写成xmm | |
ymm | 列出所有AVX寄存器及其内容 | |
sreg | 列出段寄存器及其内容 | sreg |
dreg | 列出调试寄存器及其内容 | |
creg | 列出控制寄存器及其内容 | |
info cpu | 列出所有CPU的寄存器及其内容 | |
info flags | 呈现EFLAGS寄存器的内容 | |
info break | 列出所有断点状态信息 | |
info tab | 列出页表地址转换表 | |
info device | 列出指定设备device的状态 |
操作CPU寄存器
命令 | 命令含义 | 举例 |
---|---|---|
set reg = expr | 将指定的CPU寄存器reg变更为表达式的值,当前只支持通用寄存器和指令寄存器。 | set eax = 2 + 2*2<br />set esi = 2 * eax + ebx |
其他命令
命令 | 命令含义 | 举例 |
---|---|---|
ptime | 打印当前时间(模拟器自从启动后的tick数) |
更多细节请参考官网。