欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > bochs常用调试命令笔记

bochs常用调试命令笔记

2025/2/25 1:21:26 来源:https://blog.csdn.net/wbo112/article/details/144171036  浏览:    关键词:bochs常用调试命令笔记

bochs

循环次数的是寄存器CX的,调试命令“n”来越过循环体

u反汇编 count指定汇编语句条数

下面就是反汇编当前所在位置后面10条指令

在这里插入图片描述

info eflags查看eflags标志,16位处理器是flags,32位处理器是eflags

在这里插入图片描述

id、vip、vif、ac、vm、rf、nt、IOPL这些标志,是32位处理器才有的。

“of”是溢出标志;“df”是方向标志;“if”和“tf”是和中断有关的标志;“sf”是符号标志;“zf”是零标志;“af”是辅助进位标志;“pf”是奇偶标志;“cf”是进位标志。

显示的标志名称是小写的,说明该标志为“0”;否则,该标志的状态为“1”。

“print-stack”命令来查看当前栈。当前栈是由段寄存器SS指示的,栈顶是由栈指针寄存器SP指示的。

在这里插入图片描述

Bochs并不知道栈的实际大小,因此,它只是显示栈顶(由SP指示)以下的16个字。如图所示,栈顶数据是0x0030,其物理内存地址是0xFFFE

查看某个内存地址 使用x

x/2xw 0x7cc7 查看线性地址0x7cc7开始的两个字的内存,使用16进制显示(注意:1个字是2个字节)

在这里插入图片描述

当然用段寄存器:偏移地址这种也是可以的。

如下图开始将·mov eax, dword ptr ds:0x000005eb执行这条指令,后面通过x/2xw ds:0x000005eb查看上述地址内存的内存可以看到前面1个字(2个字节)是0x00000d08,然后使用r命令查看寄存器也能看到rax: 00000000_00000d08,使用sreg也可以看到ds:0x0030。最后我们当然也可以直接使用x/2xw 0x30:0x000005eb查看这个内存地址。注意当前在保护模式下0x30是段寄存器的选择子

(0) [0x0000000411ec] 0038:0000000000000080 (unk. ctxt): mov eax, dword ptr ds:0x000005eb ; a1eb050000
<bochs:57> x/2xw ds:0x000005eb
[bochs]:
0x000000000004088b <bogus+       0>:    0x00000d08      0x00000428      
<bochs:58> n
Next at t=17207118
(0) [0x0000000411f1] 0038:0000000000000085 (unk. ctxt): mov ebx, eax              ; 89c3
<bochs:59> r
rax: 00000000_00000d08
......
<bochs:60> sreg
......
ds:0x0030, dh=0x00409304, dl=0x02a00ecb, valid=7Data segment, base=0x000402a0, limit=0x00000ecb, Read/Write, Accessed
......
<bochs:61> x/2xw 0x30:0x000005eb
[bochs]:
0x000000000004088b <bogus+       0>:    0x00000d08      0x00000428

显示字符串

比如我在ds:290有个字符串,ds段寄存器中段基址是0x00007c00

   105 00000122 73306B65346F723932-          string           db 's0ke4or92xap3fv8giuzjcy5l1m7hd6bnqtw.'#c14_mbr.lst中

可以使用段寄存器+偏移量的方式打印

在这里插入图片描述

也可以直接使用内存地址打印

0x7c00+0x122=07d22

在这里插入图片描述

也可以直接使用表达式

在这里插入图片描述

添加断点b [地址],如 b 0x0000000000007d79就会在0x0000000000007d79处添加一个断点。

使用info b查看断点

<bochs:106> info b
Num Type           Disp Enb Address1 pbreakpoint    keep y   0x000000007c002 pbreakpoint    keep y   0x000000007d753 pbreakpoint    keep y   0x000000007d79

使用delete [标号]来删除断点。

比如想要删除0x000000007d75处的断点,使用delete 2就可以将这个断点删除。

help info可以显示所有Info相关的命令

<bochs:218> help info
info break - show information about current breakpoint status
info cpu - show dump of all cpu registers
info idt - show interrupt descriptor table
info ivt - show interrupt vector table
info gdt - show global descriptor table
info tss - show current task state segment
info tab - show page tables
info eflags - show decoded EFLAGS register
info symbols [string] - list symbols whose prefix is string
info device - show list of devices supported by this command
info device [string] - show state of device specified in string
info device [string] [string] - show state of device with options

根据上面的提示,要显示tss的信息,输入info tss即可

<bochs:221> info tss
tr:s=0x68, base=0x00000000001040e8, valid=1
ss:esp(0): 0x0024:0x00001000
ss:esp(1): 0x002d:0x00001000
ss:esp(2): 0x003e:0x00001000
cr3: 0x00000000
eip: 0x00000000
eflags: 0x00000000
cs: 0x0000 ds: 0x0000 ss: 0x0000
es: 0x0000 fs: 0x0000 gs: 0x0000
eax: 0x00000000  ebx: 0x00000000  ecx: 0x00000000  edx: 0x00000000
esi: 0x00000000  edi: 0x00000000  ebp: 0x00000000  esp: 0x00000000
ldt: 0x0060
i/o map: 0x0067

要显示gdt的内容

<bochs:222> info gdt
gdt (base=0x0000000000007e00, limit=111):
gdt[0x0000]=<null entry>
gdt[0x0008]=Data segment, base=0x00000000, limit=0xffffffff, Read/Write, Accessed
gdt[0x0010]=Code segment, base=0x00007c00, limit=0x000001ff, Execute-Only, Non-Conforming, Accessed, 32-bit
gdt[0x0018]=Data segment, base=0x00007c00, limit=0xffffefff, Read/Write, Expand-down, Accessed
gdt[0x0020]=Data segment, base=0x000b8000, limit=0x00007fff, Read/Write, Accessed
gdt[0x0028]=Code segment, base=0x00040018, limit=0x000001e3, Execute-Only, Non-Conforming, Accessed, 32-bit
gdt[0x0030]=Data segment, base=0x000401fc, limit=0x00000d83, Read/Write, Accessed
gdt[0x0038]=Code segment, base=0x00040f80, limit=0x0000049f, Execute-Only, Non-Conforming, Accessed, 32-bit
gdt[0x0040]=32-Bit Call Gate target=0x0028:0x00000000, DPL=3
gdt[0x0048]=32-Bit Call Gate target=0x0028:0x000000b9, DPL=3
gdt[0x0050]=32-Bit Call Gate target=0x0028:0x000000fe, DPL=3
gdt[0x0058]=32-Bit Call Gate target=0x0038:0x0000048c, DPL=3
gdt[0x0060]=LDT
gdt[0x0068]=32-Bit TSS (Busy) at 0x001040e8, length 0x00067
You can list individual entries with 'info gdt [NUM]' or groups with 'info gdt [NUM] [NUM]'

根据提示,如果我们想要查看某个指定条目,输入info gdt 数组下标就可以

<bochs:229> info gdt 2
gdt (base=0x0000000000007e00, limit=111):
gdt[0x0010]=Code segment, base=0x00007c00, limit=0x000001ff, Execute-Only, Non-Conforming, Accessed, 32-bit

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词