日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Bochs调试指令

發布時間:2025/6/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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改為np

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 按照字符顯示

nfu是可選參數,如果不指定,則u默認是wf默認是x。如果前面使用過x

xp命令,會按照上一次的x或者xp命令所使用的值。n默認為1addr 也是一個

可選參數,如果不指定,addr0,如過前面使用過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] 顯示物理地址startend之間數據的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]

反匯編物理地址startend 之間的代碼,如

果不指定參數則反匯編當前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條指令就中斷。val64-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 網卡信息。 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Bochs调试指令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。