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