Bochs 的調試命令

Bochs 的調試命令

h|help    - 顯示所有指令列表
h|help 指令 - 顯示指定指令的幫助信息

-*- 調試器控制 -*-

  help
    顯示所有指令列表

  q|quit|exit
    退出虛擬機

  instrument
    使用指定命令調用 BX_INSTR_DEBUG_CMD 回調
    instrument <命令>

  trace
    trace on - 執行每條指令時顯示指令的反彙編代碼
    trace off - 禁用指令跟蹤

  trace-reg
    trace-reg on - 執行每條指令之前打印所有寄存器的內容
    trace-reg off - 禁用寄存器狀態跟蹤

  trace-mem
    trace-mem on - 打印指令執行期間發生的所有內存訪問
    trace-mem off - 禁用內存訪問跟蹤

  u|disasm
    u|disasm [/數量] <起始位置> <結束位置> - 反彙編指定線性地址的指令
    選項 '數量' 是反彙編指令的數量
    u|disasm switch-mode - 在 Intel 和 AT&T 反彙編語法之間切換
    u|disasm hex on/off - 控制 disasm 的偏移和位移格式
    u|disasm size = n  - 告訴調試器在使用 "disassemble" 命令時要使用的段大小[16|32|64]

  ldsym
    從文件加載符號
    ldsym [全局] <文件名> [偏移量]

  slist
    列出以指定字符串開頭的符號(與 'info symbols' 相同)
    slist [字符串]

-*- 執行控制 -*-

  c|cont|continue
    繼續運行

  s|step
    單步進入

  p|n|next
    單步跳過

  modebp
    切換“模式更改”中斷的狀態
    開啓後,實模式與保護模式之間切換時觸發

  vmexitbp
    切換“虛擬機退出”中斷的狀態
    開啓後,虛擬機退出時觸發

-*- 斷點管理 -*-

  vb|vbreak
    用虛擬地址下斷點
    vb 0x700:0xc00

  lb|lbreak
    用線性地址下斷點
    lb 0x700:0xc00 | vb 0x7c00

  pb|pbreak|b|break
    用物理地址下斷點
    b 0x700:0xc00 | vb 0x7c00

  sb
    從當前指令開始,再執行指定條指令後中斷
    sb 10

  sba
    從首個指令開始,共執行指定條指令後中斷
    sb 10

  blist
    列出所有斷點,相當於 info b

  bpe
    啓用指定編號的斷點
    bpe 1

  bpd
    禁用指定編號的斷點
    bpd 1

  d|del|delete
    刪除指定編號的斷點
    d 1

  watch
    watch 顯示當前所有讀寫斷點
    watch read 0x7c00 設置讀斷點(當指定地址發生讀取操作時中斷)
    watch write 0x7c00 設置寫斷點(當指定地址發生寫入操作時中斷)
    watch stop|continue 開關選項,當遇到讀寫斷點時是中斷還是提示並繼續

  unwatch
    unwatch 清除當前所有讀寫斷點
    unwatch read 0x7c00 清除讀斷點
    unwatch write 0x7c00 清除寫斷點

-*- CPU 和內存相關 -*-

  x
    查看線性內存某地址指定長度的內容
    x /長度 地址
    長度後面可以跟 x,d,u,o,t,c 表示以“16進制、10進制、無符號數、8進制、2進制、字符”格式顯示
    長度後面可以跟 b,h,w 表示以“單字節、雙字節、四字節”格式顯示
    長度後面可以跟 m 表示以“緊湊的十六進制”格式顯示
    本次設置會影響下次的 x 命令

  xp
    查看物理內存某地址的內容,用法同 x
    x /長度 地址

  setpmem
    設置物理內存某地址的內容,數據大小隻能是 1、2、4 字節
    setpmem <地址> <數據大小> <值>

  writemem
    將指定線性地址開始的指定長度的內容寫入文件
    writemem <文件名> <線性地址> <字節數>

  crc
    顯示兩個地址之間的數據的 crc 校驗值
    crc <起始地址> <結束地址>

  info
    info break - 顯示斷點信息
    info cpu  - 顯示所有 cpu 寄存器的轉儲
    info idt  - 顯示中斷描述符表
    info ivt  - 顯示中斷向量表
    info gdt  - 顯示全局描述符表
    info tss  - 顯示當前任務狀態段
    info tab  - 顯示頁面表
    info eflags - 顯示已解碼的 EFLAGS 寄存器
    info symbols [字符串] - 列出以指定字符串開頭的符號
    info device - 顯示此命令支持的設備列表
    info device [字符串] - 顯示指定設備的狀態
    info device [字符串] [字符串] - 顯示帶選項的指定設備的狀態

  r|reg|regs|registers
    列出 CPU 寄存器及其內容

  fp|fpu
    顯示 FPU 狀態

  mmx
    顯示 MMX 狀態

  sse
    顯示 SSE 狀態

  sreg
    列出段寄存器

  dreg
    列出調試寄存器

  creg
    列出控制寄存器

  page
    顯示線性地址所在頁面到物理頁面的映射
    page 0x7c00

  set
    set <寄存器名> = <表達式>  - 設置寄存器的值
    set eflags = <表達式>    - 設置 eflags 的值,並非所有標誌都可以修改
    set $cpu = <N>        - 在 SMP 模擬中“將調試器控制”移動到 cpu <N>
    set $auto_disassemble = 1  - 設置調試器在每次執行停止時反彙編當前指令
    set u|disasm|disassemble on - 與'set $auto_disassemble = 1'相同
    set u|disasm|disassemble off - 與'set $auto_disassemble = 0'相同

  ptime
    顯示當前時間(自模擬開始以來的 tick 數)

  print-stack
    打印棧頂以下指定個數的 word 數據,默認 16 個
    print-stack <word 數>

  ?|calc
    計算表達式並顯示結果。
    calc <表達式>
    'expr' 可以引用任何通用寄存器、opmask 寄存器和 段寄存器,可以使用任何算術和邏輯運算。
    也支持特殊的 ':' 運算符來計算地址,比如實模式和 v86 模式下的“段:偏移”地址,或保護模式下的“選擇子:偏移”地址。

-*- 使用 bochs 參數樹 -*-

  show "param"
    show <命令>  - 切換指定“符號信息”的顯示
    show     - 顯示當前的 show 模式
    show mode   - 當處理器切換模式時顯示信息
    show int   - 當發生中斷時顯示信息
    show softint - 當發生軟件中斷時顯示信息
    show extint  - 當發生外部中斷時顯示信息
    show call   - 當發生 call 時顯示信息
    show iret   - 當發生 iret 時顯示信息
    show all   - 打開所有“符號信息”的顯示
    show off   - 關閉“符號信息”的顯示
    show dbg_all - 打開所有 bx_dbg 標誌
    show dbg_none - 關閉所有 bx_dbg 標誌

  restore
    從文件中恢復 bochs 的 root 參數
    restore <參數名> [路徑]
    比如:
    restore "cpu0"     - 從當前目錄的 "cpu0" 文件中恢復 CPU #0
    restore "cpu0" "/save" - 從 "/save" 目錄的 "cpu0" 文件中恢復 CPU #0
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章