精华内容
下载资源
问答
  • bochs调试

    2016-04-16 11:08:30
    bochs调试FAQ: 1. Q:如何从引导扇区开始设置断点? A: BIOS被载入内存中运行,其引导扇区的地址一般都是在0x7c00,因为在实模式下,逻辑地址和物理地址是一一对应的, 所以我们可以在启动bochs调试的命令行下输入 ...

    bochs调试FAQ:

    1.       Q:如何从引导扇区开始设置断点?

    A: BIOS被载入内存中运行,其引导扇区的地址一般都是在0x7c00,因为在实模式下,逻辑地址和物理地址是一一对应的, 所以我们可以在启动bochs调试的命令行下输入

            pb 0x7c00 或者 vb 0:0x7c00

    接着输入

            c

    bochs就会在0x7c00处停下

     

    2.       Q: 我想在单步执行(s)后看到寄存器的变化情况, 该怎么设置?

    A: 输入

                   trace-reg on

       后, 再执行单步调试的时候都会显示寄存器的当前状态了.

     

    3.       Q: 在单步调试的时候,遇到一个调用子程序的指令,输入s会把调试跳进子程序中,如何只执行子程序而不要陷进去调试?

    A: 在调试子程序的指令处,不用s改为n或p

    4.       Q: 查看当前堆栈的命令?

    A: print-stack

     

    Table 1. 部分Bochs调试指令

    行为

    指令

    举例

    在某物理地址设置断点

    b addr

    b 0x30400

    显示当前所有断点信息

    info break

    info break

    继续执行,直到遇上断点

    c

    c

    单步执行

    s

    s

    单步执行(遇到函数则跳过)

    n

    n

    查看寄存器信息

    info cpu

    r

    fp

    sreg

    creg

    info cpu

    r

    fp

    sreg

    creg

    查看堆栈

    print-stack

    print-stack

    查看内存物理地址内容

    xp /nuf addr

    xp /40bx 0x9013e

    查看线性地址内容

    x /nuf addr

    x /40bx 0x13e

    反汇编一段内存

    u start end

    u 0x30400 0x3040D

    反汇编执行的每一条指令

    trace-on

    trace-on

    每执行一条指令就打印CPU信息

    trace-reg

    trace-reg on

    其中"xp /40bx 0x9013e"这样的格式可能显得有点复杂,读者可以用"help x"这一指令在Bochs中亲自看一下它代表的意义

     

    [执行控制]

     

    c|cont 向下执行,相当于WinDBG的“g”。

     

    s|step|stepi [count] 单步执行,相当于WinDBG的“t”,count 默认为 1。

     

    p|n|next 单步执行,类似于WinDBG的“p”。

     

    q|quit|exit 退出调试,同时关闭虚拟机。

     

    Ctrl-C 结束执行状态,返回调试器提示符。

     

    Ctrl-D if at empty line on command line, exit

    (至少在Windows版本中我没有发现Ctrl-D有什么功能)

     

    [执行断点]

     

    vb|vbreak [seg:off] 在虚拟地址上下断点。

     

    lb|lbreak [addr] 在线性地址上下断点,相当于WinDBG的“bp”。

     

    pb|pbreak|b|break [addr] 在物理地址上下断点。(为了兼容GDB的语法,地址前

    可以加上一个“*”)。

     

    blist 显示断点状态,相当于WinDBG的“bl”。

     

    bpd|bpe [num] 禁用/启用断点,WinDBG的“be”和“bd”。num是断

    点号,可以用blist命令查询。

     

    d|del|delete [num] 删除断点,相当于WinDBG的“bc”。mum是断点号,可

    以用blist命令查询。

     

    [读写断点]

     

    watch read [addr] 设置读断点。

    watch write [addr] 设置写断点。

    unwatch read [addr] 清除读断点。

    unwatch write [addr] 清除写断点。

    watch 显示当前所有读写断点。

    unwatch 清除当前所有读写断点。

    watch stop|continue 开关选项,设置遇到读写断点时中断下来还是显示出来但

    是继续运行。

     

     

    [内存操作]

     

    x /nuf [addr] 显示线性地址的内容

    xp /nuf [addr] 显示物理地址的内容

    n 显示的单元数

    u 每个显示单元的大小,u可以是下列之一:

    b BYTE

    h WORD

    w DWORD

    g DWORD64

    注意: 这种命名法是按照GDB习惯的,而并不是按照inter的规范。

     

    f 显示格式,f可以是下列之一:

    x 按照十六进制显示

    d 十进制显示

    u 按照无符号十进制显示

    o 按照八进制显示

    t 按照二进制显示

    c 按照字符显示

    n、f、u是可选参数,如果不指定,则u默认是w,f默认是x。如果前面使用过x或

    者xp命令,会按照上一次的x或者xp命令所使用的值。n默认为1。addr 也是一个

    可选参数,如果不指定,addr是0,如过前面使用过x或者xp命令,指定了n=i,

    则再次执行时n默认为i+1。

     

    setpmem [addr] [size] [val] 设置物理内存某地址的内容。

     

    需要注意的是,每次最多只能设置一个DWORD:

    这样是可以的:

    <bochs:1> setpmem 0x00000000 0x4 0x11223344

    <bochs:2> x /4 0x00000000

    [bochs]:

    0x00000000 <bogus+ 0>: 0x11223344 0x00000000 0x00000000 0x00000000

    这样也可以:

    <bochs:1> setpmem 0x00000000 0x2 0x11223344

    <bochs:2> x /4 0x00000000

    [bochs]:

    0x00000000 <bogus+ 0>: 0x00003344 0x00000000 0x00000000 0x00000000

    或者:

    <bochs:1> setpmem 0x00000000 0x1 0x20

    <bochs:2> x /4 0x00000000

    [bochs]:

    0x00000000 <bogus+ 0>: 0x00000020 0x00000000 0x00000000 0x00000000

    下面的做法都会导致出错:

    <bochs:1> setpmem 0x00000000 0x3 0x112233

    Error: setpmem: bad length value = 3

    <bochs:2> setpmem 0x00000000 0x8 0x11223344

    Error: setpmem: bad length value = 8

     

    crc [start] [end] 显示物理地址start到end之间数据的CRC。

     

     

    [寄存器操作]

     

    set $reg = val 设置寄存器的值。现在版本可以设置的寄存器包括:

    eax ecx edx ebx esp ebp esi edi

    暂时不能设置:

    eflags cs ss ds es fs gs

     

    r|reg|registers reg = val 同上。

     

    dump_cpu 显示完整的CPU信息。

     

    set_cpu 设置CPU状态,这里可以设置dump_cpu所能显示出来的

    所有CPU状态。

     

    [反汇编命令]

     

    u|disas|disassemble [/num] [start] [end]

    反汇编物理地址start到end 之间的代码,如

    果不指定参数则反汇编当前EIP指向的代码。

    num是可选参数,指定处理的代码量。

    set $disassemble_size = 0|16|32 $disassemble_size变量指定反汇编使用的段

    大小。

     

    set $auto_disassemble = 0|1 $auto_disassemble决定每次执行中断下来的

    时候(例如遇到断点、Ctrl-C等)是否反汇

    编当前指令。

     

    [其他命令]

    trace-on|trace-off Tracing开关打开后,每执行一条指令都会将反汇编的结果

    显示出来。

     

    ptime 显示Bochs自本次运行以来执行的指令条数。

     

    sb [val] 再执行val条指令就中断。val是64-bit整数,以L结尾,形

    如“1000L”

     

    sba [val] 执行到Bochs自本次运行以来的第val条指令就中断。val是

    64-bit整数,以L结尾,形如“1000L”

     

    modebp 设置切换到v86模式时中断。

     

    record ["filename"] 将输入的调试指令记录到文件中。文件名必须包含引号。

     

    playback ["filename"] 回放record的记录文件。文件名必须包含引号。

     

    print-stack [num] 显示堆栈,num默认为16,表示打印的条数。

     

    ?|calc 和WinDBG的“?”命令类似,计算表达式的值。

     

    load-symbols [global] filename [offset]

    载入符号文件。如果设定了“global”关键字,则符号针

    对所有上下文都有效。offset会默认加到所有的symbol地

    址上。symbol文件的格式为:"%x %s"。

     

    [info命令]

     

    info program 显示程序执行的情况。

    info registers|reg|r 显示寄存器的信息。

    info pb|pbreak|b|break 相当于blist

    info dirty 显示脏页的页地址。

    info cpu 显示所有CPU寄存器的值。

    info fpu 显示所有FPU寄存器的值。

    info idt 显示IDT。

    info gdt [num] 显示GDT。

    info ldt 显示LDT。

    info tss 显示TSS。

    info pic 显示PIC。

    info ivt [num] [num] 显示IVT。

    info flags 显示状态寄存器。

    info cr 显示CR系列寄存器。

    info symbols 显示symbol信息。

    info ne2k|ne2000 显示虚拟的ne2k网卡信息。

     

     

    展开全文
  • bochs 调试

    2019-01-08 15:44:39
    bochs:2&amp;gt; b 0x7c00 &amp;lt;bochs:3&amp;gt; c (0) Breakpoint 1, 0x00007c00 in ?? () Next at t=12943099 (0) [0x00007c00] 0000:7c00 (unk. ctxt): mov ax, cx ; 89c8 &amp;lt;bochs:4&...

    bochs 基本调试

    基本操作

    Bochs 调试指令
    行为	指令	举例
    在某物理地址设置断点	b addr	b 0x7c00
    显示当前所有断点信息	info break	info break
    继续执行,直至遇到断点	c	c
    单步执行	s	s
    单步执行(遇到函数跳过)	n	n
    查看寄存器信息	info cpu
    r
    fp
    sreg
    creg	info cpu
    r
    fp
    sreg
    cre
    查看堆栈	print-stack	print-stack
    查看内存物理地址内容	xp /nuf addr	xp /40bx 0x9013e
    查看线性地址内容	x /nuf addr	x /40bx 0x13e
    反汇编一段内存	u start end	u 0x30400 0x3040d
    反汇编执行的每一条指令	trace-on	trace-on
    每执行一条指令就打印 CPU 信息	trace-reg	trace-reg
    
    
    <bochs:2> b 0x7c00
    <bochs:3> c
    (0) Breakpoint 1, 0x00007c00 in ?? ()
    Next at t=12943099
    (0) [0x00007c00] 0000:7c00 (unk. ctxt): mov ax, cx                ; 89c8
    <bochs:4> sreg
    es:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
    	Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
    cs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
    	Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
    ss:0x0000, dh=0x00009300, dl=0x0000ffff, valid=7
    	Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
    ds:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
    	Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
    fs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
    	Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
    gs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
    	Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
    ldtr:0x0000, dh=0x00008200, dl=0x0000ffff, valid=1
    tr:0x0000, dh=0x00008b00, dl=0x0000ffff, valid=1
    gdtr:base=0x000fb997, limit=0x30
    idtr:base=0x00000000, limit=0x3ff
    <bochs:5> r
    eax: 0x0000aa55 43605
    ecx: 0x00000000 0
    edx: 0x00000000 0
    ebx: 0x00000000 0
    esp: 0x0000ffd6 65494
    ebp: 0x00000000 0
    esi: 0x000e32f8 930552
    edi: 0x0000ffac 65452
    eip: 0x00007c00
    eflags 0x00000082: id vip vif ac vm rf nt IOPL=0 of df if tf SF zf af pf cf
    <bochs:6> blist
    Num Type           Disp Enb Address
      1 pbreakpoint    keep y   0x00007c00
    
    # A bootsect, which print a string by BIOS interrupt video services(int 0x10)
    .section .text
    .global _start
    .code16
    _start:
    	movw	%cx,	%ax
    	movw	%ax,	%ds
    	movw	%ax,	%es
    	movw	$msgstr,%bp
    	movw	len,	%cx
    	movb	$0x05,	%dh
    	movb	$0x08,	%dl
    	movb	$0x01,	%al
    	movb	$0x13,	%ah
    	movb	$0x01,	%bl
    	movb	$0x00,	%bh
    	int		$0x10
    1:
    	jmp		1b
    msgstr:
    	.asciz	"Hello babyos(print by BIOS int 0x10:0x13, mode 0x01)!"
    len:
    	.int	. - msgstr
    	.org	0x1fe,	0x90
    	.word	0xaa55
    makefile:
    all: boot.img
    boot.o: boot.s
    	as -o $@ $<
    boot: boot.o
    	ld --oformat binary -N -Ttext 0x7c00 -o $@ $<
    boot.img: boot
    	dd if=boot of=boot.img bs=512 count=1
     
    clean:
    	rm ./boot ./boot.img ./boot.o
    
    <bochs:7> u 0x7c00
    00007c00: (                    ): mov ax, cx                ; 89c8
    <bochs:8> u 0x7c00 0x7c00+512
    00007c00: (                    ): mov ax, cx                ; 89c8
    00007c02: (                    ): mov ds, ax                ; 8ed8
    00007c04: (                    ): mov es, ax                ; 8ec0
    00007c06: (                    ): mov bp, 0x7c1d            ; bd1d7c  0x7c1d 是msg地址
    00007c09: (                    ): mov cx, word ptr ds:0x7c53 ; 8b0e537c
    00007c0d: (                    ): mov dh, 0x05              ; b605
    00007c0f: (                    ): mov dl, 0x08              ; b208
    00007c11: (                    ): mov al, 0x01              ; b001
    00007c13: (                    ): mov ah, 0x13              ; b413
    00007c15: (                    ): mov bl, 0x01              ; b301
    00007c17: (                    ): mov bh, 0x00              ; b700
    00007c19: (                    ): int 0x10                  ; cd10
    00007c1b: (                    ): jmp .-2                   ; ebfe
    00007c1d: (                    ): dec ax                    ; 48   要输出的字符从这里开始
    00007c1e: (                    ): insb byte ptr es:[di], dx ; 656c
    00007c20: (                    ): insb byte ptr es:[di], dx ; 6c
    00007c21: (                    ): outsw dx, word ptr ds:[si] ; 6f
    00007c22: (                    ): and byte ptr ss:[bp+si+97], ah ; 206261
    00007c25: (                    ): bound di, ds:[bx+di+111]  ; 62796f
    00007c28: (                    ): jnb .+40                  ; 7328
    00007c2a: (                    ): jo .+114                  ; 7072
    00007c2c: (                    ): imul bp, word ptr ss:[bp+116], 0x6220 ; 696e742062
    00007c31: (                    ): jns .+32                  ; 7920
    00007c33: (                    ): inc dx                    ; 42
    00007c34: (                    ): dec cx                    ; 49
    00007c35: (                    ): dec di                    ; 4f
    00007c36: (                    ): push bx                   ; 53
    00007c37: (                    ): and byte ptr ds:[bx+di+110], ch ; 20696e
    00007c3a: (                    ): jz .+32                   ; 7420
    00007c3c: (                    ): xor byte ptr ds:[bx+si+49], bh ; 307831
    00007c3f: (                    ): xor byte ptr ss:[bp+si], bh ; 303a
    00007c41: (                    ): xor byte ptr ds:[bx+si+49], bh ; 307831
    00007c44: (                    ): xor bp, word ptr ds:[si]  ; 332c
    00007c46: (                    ): and byte ptr ds:[di+111], ch ; 206d6f
    00007c49: (                    ): and byte ptr gs:[bx+si], dh ; 64652030
    00007c4d: (                    ): js .+48                   ; 7830
    00007c4f: (                    ): xor word ptr ds:[bx+di], bp ; 3129
    00007c51: (                    ): and word ptr ds:[bx+si], ax ; 2100
    00007c53: (                    ): add byte ptr ss:[bx+si], al ; 360000   这里这个 36 是字符长度
    00007c56: (                    ): add byte ptr ds:[bx+si-28528], dl ; 00909090
    00007c5a: (                    ): nop                       ; 90
    00007c5b: (                    ): nop                       ; 90
    

    页映射相关
    查看一个地址所属的物理页,查看相应的页表项,以及看该地址所具备的属性。
    格式 page addr

    <bochs:93> page 0x90000
    PML4: 0x0000000000102027    ps         A pcd pwt U W P
    PDPE: 0x0000000000103023    ps         A pcd pwt S W P
     PDE: 0x00000000000000e3    PS g pat D A pcd pwt S W P
    linear page 0x0000000000090000 maps to physical page 0x000000090000
    <bochs:94> page 0xffff800000105b60
    PML4: 0x0000000000102027    ps         A pcd pwt U W P
    PDPE: 0x0000000000103023    ps         A pcd pwt S W P
     PDE: 0x00000000000000e3    PS g pat D A pcd pwt S W P
    linear page 0xffff800000105000 maps to physical page 0x000000105000
    <bochs:95> page 0xffff800000a00000
    PML4: 0x0000000000102027    ps         A pcd pwt U W P
    PDPE: 0x0000000000103023    ps         A pcd pwt S W P
     PDE: 0x00000000e0000083    PS g pat d a pcd pwt S W P
    linear page 0xffff800000a00000 maps to physical page 0x0000e0000000
    

    查看断点

    <bochs:97> blist
    Num Type           Disp Enb Address
      1 pbreakpoint    keep y   0x000000010000
      2 pbreakpoint    keep y   0x000000100000
      3 pbreakpoint    keep y   0x000000100048
      4 pbreakpoint    keep y   0xffff8000001000bb
      5 pbreakpoint    keep y   0x0000001000c2
      6 pbreakpoint    keep y   0xffff8000001000c2
    

    特殊寄存器查看

    <bochs:98> creg
    CR0=0xe0000011: PG CD NW ac wp ne ET ts em mp PE
    CR2=page fault laddr=0x0000000000000000
    CR3=0x000000101000
        PCD=page-level cache disable=0
        PWT=page-level write-through=0
    CR4=0x00000020: pke smap smep osxsave pcid fsgsbase smx vmx osxmmexcpt umip osfxsr pce pge mce PAE pse de tsd pvi vme
    CR8: 0x0
    EFER=0x00000500: ffxsr nxe LMA LME sce
    XCR0=0x00000001: pkru hi_zmm zmm_hi256 opmask bndcfg bndregs ymm sse FPU
    <bochs:99> sreg
    es:0x0010, dh=0x00009300, dl=0x00000000, valid=1
    	Data segment, base=0x00000000, limit=0x00000000, Read/Write, Accessed
    cs:0x0008, dh=0x00209900, dl=0x00000000, valid=1
    	Code segment, base=0x00000000, limit=0x00000000, Execute-Only, Non-Conforming, Accessed, 64-bit
    ss:0x0010, dh=0x00009300, dl=0x00000000, valid=1
    	Data segment, base=0x00000000, limit=0x00000000, Read/Write, Accessed
    ds:0x0010, dh=0x00009300, dl=0x00000000, valid=1
    	Data segment, base=0x00000000, limit=0x00000000, Read/Write, Accessed
    fs:0x0010, dh=0x00009300, dl=0x00000000, valid=1
    	Data segment, base=0x00000000, limit=0x00000000, Read/Write, Accessed
    gs:0x0010, dh=0x00009300, dl=0x00000000, valid=1
    	Data segment, base=0x00000000, limit=0x00000000, Read/Write, Accessed
    ldtr:0x0000, dh=0x00008200, dl=0x0000ffff, valid=1
    tr:0x0000, dh=0x00008b00, dl=0x0000ffff, valid=1
    gdtr:base=0xffff800000105b60, limit=0x87
    idtr:base=0xffff800000105bf2, limit=0xfff
    
    展开全文
  • Bochs调试

    2020-06-25 20:50:56
    首先在起始页面设置一些基本数据,之后进入调试窗口。 b 0x7c00 设置断点 c continue,即为不断执行,到断点或终点停下 r 显示通用寄存器内容 sreg 显示段寄存器内容 xp 显示指定内存地址处的内容,默认显示一个双...

    要打开的是bochsdbg.exe。首先在起始页面设置一些基本数据,之后进入调试窗口。

    • b 0x7c00 设置断点
    • c continue,即为不断执行,到断点或终点停下
    • r 显示通用寄存器内容
    • sreg 显示段寄存器内容
    • xp 显示指定内存地址处的内容,默认显示一个双字,可以指定显示的双字个数。如xp/2 0xb8000 ,会从0xb8000起显示两个双字
    • q 退出调试过程
    • u/n 0xXXXX 反汇编指令,用于对0xXXXX地址后的n条指令进行反汇编,得到这n条指令具体是什么
    • n 完成循环和完成调用指令,在下一条指令为rep movsb、rep movsw、loop,以及call(这个书中没说,但是我试了一下,也可以)时,输入n,会自动完成这次调用或全部循环,执行到这条指令下一条指令。
    展开全文
  • Bochs调试Linux内核初级入门2、bochs调试断点和单步指令、0x7c00、关中断和开中断指令.pdf
  • Bochs 调试

    2012-11-30 15:20:58
    Bochs调试命令风格是按照GDB习惯来设计的,这对于用惯了WinDbg的人来说无疑是痛苦的,好在这是个开源软件,看着不顺眼可以考虑自己改改。  目前版本的Bochs(Version 2.1.1)支持的调试命令如下: [注意] 1、...

       Bochs的调试命令风格是按照GDB习惯来设计的,这对于用惯了WinDbg的人来说无疑是痛苦的,好在这是个开源软件,看着不顺眼可以考虑自己改改。
         目前版本的Bochs(Version 2.1.1)支持的调试命令如下:
    [注意]
    1、Bochs的文档和帮助信息中的使用说明与真实情况之间存在很大的差错和缺失,   下面的命令说明根据源码作了很多补充和修正。
    2、其中涉及到的seg(段)、off(偏移)、addr(地址)、val(值)等数字, 可以使用十六进制、十进制或者八进制,但必须按照如下形式书写:
    十六进制   0xCDEF0123
    八进制     01234567
    十进制     123456789
    尤其要注意,Bochs不能自动识别16进制的数字,也不接受12345678h这种写法。
    [执行控制]
    c|cont                           向下执行。
    s|step|stepi [count]     单步执行,count 默认为 1。
    p|n|next                      单步执行。
    q|quit|exit                   退出调试,同时关闭虚拟机。
    Ctrl-C                          结束执行状态,返回调试器提示符。
    Ctrl-D                          if at empty line on command line, exit
    [执行断点]
    vb|vbreak [seg:off]               在虚拟地址上下断点。
    lb|lbreak [addr]                    在线性地址上下断点。
    pb|pbreak|b|break [addr]    在物理地址上下断点。
    blist                                      显示断点状态。
    bpd|bpe [num]                    禁用/启用断点。num是断点号,可以用blist命令查询。
    d|del|delete [num]              删除断点。mum是断点号,可 以用blist命令查询。
    [读写断点]
    watch read [addr]          设置读断点。
    watch write [addr]         设置写断点。
    unwatch read [addr]      清除读断点。
    unwatch write [addr]     清除写断点。
    watch                             显示当前所有读写断点。
    unwatch                         清除当前所有读写断点。
    watch stop;continue      开关选项,设置遇到读写断点时中断下来还是显示出来但是继续运行。
    [内存操作]
    x   /nuf [addr]    显示线性地址的内容
    xp /nuf [addr]   显示物理地址的内容
         n            显示的单元数
         u            每个显示单元的大小,u可以是下列之一:
                         b BYTE
                         h WORD
                         w DWORD
                         g DWORD64
                         注意: 这种命名法是按照GDB习惯的,而并不是按照inter的规范。
         f            显示格式,f可以是下列之一:
                         x 按照十六进制显示
                         d 十进制显示
                         u 按照无符号十进制显示
                         o 按照八进制显示
                         t 按照二进制显示
                         c 按照字符显示
         n、f、u是可选参数,如果不指定,则u默认是w,f默认是x。如果前面使用过x或
         者xp命令,会按照上一次的x或者xp命令所使用的值。n默认为1。addr 也是一个
         可选参数,如果不指定,addr是0,如过前面使用过x或者xp命令,指定了n=i,
         则再次执行时n默认为i+1。
    setpmem [addr] [size] [val]     设置物理内存某地址的内容。
    需要注意的是,每次最多只能设置一个DWORD:
    这样是可以的:
       setpmem 0x00000000 0x4 0x11223344
    x /4 0x00000000
    [bochs]:
    0x00000000 :     0x11223344 0x00000000 0x00000000 0x00000000
    这样也可以:
       setpmem 0x00000000 0x2 0x11223344
    x /4 0x00000000
    [bochs]:
    0x00000000 :     0x00003344 0x00000000 0x00000000 0x00000000
    或者:
       setpmem 0x00000000 0x1 0x20
    x /4 0x00000000
    [bochs]:
    0x00000000 :     0x00000020 0x00000000 0x00000000 0x00000000
    下面的做法都会导致出错:
       setpmem 0x00000000 0x3 0x112233
    Error: setpmem: bad length value = 3
       setpmem 0x00000000 0x8 0x11223344
    Error: setpmem: bad length value = 8
    crc [start] [end]      显示物理地址start到end之间数据的CRC。
    [寄存器操作]
    set $reg = val                    设置寄存器的值。现在版本可以设置的寄存器包括:
                                                     eax ecx edx ebx esp ebp esi edi
                                              暂时不能设置:
                                                    eflags   cs   ss   ds   es   fs   gs
    r|reg|registers reg = val    同上。
    dump_cpu                          显示完整的CPU信息。
    set_cpu                              设置CPU状态,这里可以设置dump_cpu所能显示出来的所有CPU状态。
    dump_cpu和set_cpu格式如下:
        "eax:0x%x\n"
        "ebx:0x%x\n"
        "ecx:0x%x\n"
        "edx:0x%x\n"
        "ebp:0x%x\n"
        "esi:0x%x\n"
        "edi:0x%x\n"
        "esp:0x%x\n"
        "eflags:0x%x\n"
        "eip:0x%x\n"
        "cs:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
        "ss:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
        "ds:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
        "es:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
        "fs:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
        "gs:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
        "ldtr:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
        "tr:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
        "gdtr:base=0x%x, limit=0x%x\n"
        "idtr:base=0x%x, limit=0x%x\n"
        "dr0:0x%x\n"
        "dr1:0x%x\n"
        "dr2:0x%x\n"
        "dr3:0x%x\n"
        "dr4:0x%x\n"
        "dr5:0x%x\n"
        "dr6:0x%x\n"
        "dr7:0x%x\n"
        "tr3:0x%x\n"
        "tr4:0x%x\n"
        "tr5:0x%x\n"
        "tr6:0x%x\n"
        "tr7:0x%x\n"
        "cr0:0x%x\n"
        "cr1:0x%x\n"
        "cr2:0x%x\n"
        "cr3:0x%x\n"
        "cr4:0x%x\n"
        "inhibit_int:%u\n"
        "done\n"
    [反汇编命令]
    u|disas|disassemble [/num] [start] [end]
                                         反汇编物理地址start到end 之间的代码,如 果不指定参数则反汇编当前EIP指向的代码。num是可选参数,指定处理的代码量。
    set $disassemble_size = 0;16;32      $disassemble_size变量指定反汇编使用的段大小。
    set $auto_disassemble = 0;1          $auto_disassemble决定每次执行中断下来的时候(例如遇到断点、Ctrl-C等)是否反汇编当前指令。
    [其他命令]
    trace-on;trace-off       Tracing开关打开后,每执行一条指令都会将反汇编的结果显示出来。
    ptime                    显示Bochs自本次运行以来执行的指令条数。
    sb [val]                 再执行val条指令就中断。val是64-bit整数,以L结尾,形如“1000L”
    sba [val]                执行到Bochs自本次运行以来的第val条指令就中断。val是64-bit整数,以L结尾,形如“1000L”
    modebp                   设置切换到v86模式时中断。
    record ["filename"]      将输入的调试指令记录到文件中。文件名必须包含引号。
    playback ["filename"]    回放record的记录文件。文件名必须包含引号。
    print-stack [num]        显示堆栈,num默认为16,表示打印的条数。
    ?|calc                   计算表达式的值。
    load-symbols [global] filename [offset]
                             载入符号文件。如果设定了“global”关键字,则符号针对所有上下文都有效。offset会默认加到所有的symbol地址上。symbol文件的格式为:"%x %s"。
    [info命令]
    info program                     显示程序执行的情况。
    info registers|reg|r           显示寄存器的信息。
    info pb|pbreak|b|break    相当于blist
    info dirty                          显示脏页的页地址。
    info cpu                            显示所有CPU寄存器的值。
    info fpu                            显示所有FPU寄存器的值。
    info idt                             显示IDT。
    info gdt [num]                  显示GDT。
    info ldt                             显示LDT。
    info tss                            显示TSS。
    info pic                             显示PIC。
    info ivt [num] [num]        显示IVT。
    info flags                         显示状态寄存器。
    info cr                             显示CR系列寄存器。
    info symbols                   显示symbol信息。
    info ne2k|ne2000   显示虚拟的ne2k网卡信息。
    上述的一些命令都是bochs常用的命令。

    展开全文
  • bochs调试指令

    2014-09-12 22:07:50
    bochs调试指令,很详细
  • Bochs 调试

    2013-01-23 07:37:30
    Bochs 调试
  • 利用 Bochs 调试内核
  • Bochs调试NTLDR

    2013-07-10 19:52:49
    Bochs调试NTLDR, 详细介绍了Bochs的用法,以及如何调试NTLDR
  • bochs调试入门

    2019-09-27 23:16:45
    bochs调试入门 安装 sudo apt-get install vgabios bochs bochs-x bximage 创建软盘 bximage fd 一直回车,将在当前目录下会创建一个默认大小为1.44M的软盘名为a.img。 dd if=boot of=a.img bs=512 count=1 ...
  • bochs调试内核

    2015-09-08 11:04:10
    利用bochs调试内核(主要是在windows下调试) Bochs具有非常强大的操作系统内核调试功能。这也是本文选择Bochs作为首选实验环境的主要原因之一。有关Bochs调试功能的说明参见前面14.2节,这里基于Linux 0.11内核来...
  • 使用Bochs调试Linux内核初级入门.pdf
  • bochs调试VT代码

    2020-06-11 11:00:36
    这边使用bochs调试代码实在是太郁闷了. 今天我索性要将我所有bochs上遇到的调试问题说一下.想要用bochs调试(VT)代码一定要耐心, 不然就想杀人. 安装bochs的系统参考这个帖子...
  • bochs调试教程

    2017-02-14 12:29:53
    bochs可以调试os,这个功能不一般,所以在学习过程中做一个简单的记录。 涉及到的工具有: ...假设一个bootsect,它可以打印hello到显示器,我们以此为案例学习bochs调试。代码是这样的(1.asm): mov ah, 0x...
  • bochs调试方法

    2019-11-16 22:13:24
    Bochs 调试指令 在某物理地址设置断点 b addr 继续执行,直至遇到断点 c 例如: 单步执行 s 查看内存物理地址内容 xp addr 反汇编一段内存 u start end 查看寄存器或者gdt表 ...
  • 利用bochs 调试(转)

    2019-10-04 21:19:19
    利用bochs调试内核(转载) 利用bochs调试内核(主要是在windows下调试)Bochs具有非常强大的操作系统内核调试功能。这也是本文选择Bochs作为首选实验环境的主要原因之一。有关Bochs调试功能的说明参见前面14.2节...
  • linux0.11 bochs 调试.txt

    2010-04-19 01:43:33
    linux0.11 bochs 调试.txt linux0.11 bochs 调试.txt

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,235
精华内容 894
关键字:

bochs调试