Sun微系統的JavaHelp系統是一種應用程序幫助技術,它可以在所有支持Java的平臺和瀏覽器中運行只要它是一個純粹的Java產品。通過
applet和Java應用程序,在其他環境下,比如在互聯網或企業內部互聯網中,它是理想的使用對象。在本文中,我將回顧JavaHelp的主要作用,
并闡明它的簡單使用方法。
優點
JavaHelp通過使用Java基礎類(JFC) 軟件組件來實現,這使得開發戶自定義界面和功能變得靈活輕松。您可以輕而易舉地將應用程序的幫助信息嵌入到應用程序之中,或者嵌入到另一個獨立的窗口里。JFC 還具有通過自定義導航控件拓展幫助功能的能力。
JavaHelp使動態更新幫助數據或將其存儲在一個便利的位置變得簡單易行,不管是在客戶端還是服務器端。內容窗口使用HTML 3.2格式顯示話題,使內容設計變得簡單。標準導航提供內容表單(TOC)、索引和全文搜索。(TOC和索引都遵循W3C標準。)
JavaHelp Data
Sheet提供以下信息:TOC提供層疊式和擴展式話題展示,無限量等級層次和多重TOC的合并。TOC與內容閱讀器同步顯示,也就是說顯示的話題在
TOC中被突出。索引支持多重索引的合并。全文搜索被設計得很靈活,并且可以配置。搜索引擎也可置于用戶或服務器中的任一方。
幫助內容和搜索引擎被壓縮成一個使用標準JAR格式的單個文件。盡管為了使存儲和訪問更具靈活性,推薦將所有文件壓縮成一個單獨的文件,但是您仍然可以將
所有文件以擴展的格式保存在目錄中。您可以在自定義編寫的導航器、搜索引擎、標準JavaHelp閱讀器或在任何HTML顯示中,包括標準Web瀏覽器
中,查看和導航內容。
JavaHelp API提供一個上下文敏感幫助和ID映射的機制。您可以將多重組件的幫助信息用JavaHelp API合并,這樣用戶就看到一個單獨的完整文檔。合并機制可以應用于TOC、索引和搜索數據庫。
特性
JavaHelp有兩個主要版本:1.1.3和2.0版。最早支持JavaHelp 2.0的Java版本是J2SE
1.2.2,因此您無需擔心自己的代碼是否支持JavaHelp。JavaHelp系統由一個特性完整的、可擴展的規范、API以及一個參考執行組成。
標準JavaHelp系統的主窗口:有三個顯示窗口,在您退出窗口時并未被關閉,依然可配置。在默認情況下,一個主要窗口有以下三個窗格:工具欄、導航窗口和內容窗口。見圖表1。
用戶可以應用多種方式通過內部應用程序調用在線幫助,例如,當一個用戶從幫助菜單中選擇一項,或在應用程序GUI中點擊幫助按鈕,JavaHelp系統提
供一個簡便的界面,通過這個界面,應用程序要求話題的ID 得以顯示。然后JavaHelp系統將話題ID與相應的URL相連接并將其顯示出來。
ID被映射到一個被稱作映射文件的JavaHelp系統元數據文件中的URL上。例如,當為文件選擇對話框編碼時,開發人員要求話題ID
fc_help在當對話框底部的幫助按鈕被點擊時顯示。在映射文件中,ID fc_help被定義為名為
FileChooser.html的文件,使用以下XML句法:
將文件名(或URL)的規范從程序代碼分離為內容的作者提供了控制與話題ID相關的信息的自由。
工具提示是一個顯示給用戶的簡短信息,當光標停留在一個按鈕上的時間間隔長于閾值時它就會出現。您還可以將工具提示信息納入JavaHelp系統數據。
JavaHelp系統數據具有調用在線幫助的能力,能夠在應用程序GUI中描述圖形組件。用戶操縱激活語境敏感幫助,然后將組件以問題形式特定化。與組件相聯系的ID被顯示。您可以從TOC、索引導航或主要窗口的內容窗格中顯示幫助話題。
輕型組件
輕型組件能夠向幫助話題添加功能。這些組件與Java的applet相似,但它們的加載和執行更為迅速。一個幫助的創作者能夠使用已經在JavaHelp
中執行的輕型組件;這個組件執行彈出窗口和次級窗口。在HTML
話題文件中使用輕型組件,您可以使用HTML<object>標記,正如列表A中的例子所顯示的。
在例子中,彈出的對象包括文件../topicB/glossary_def.html,用戶點擊的對象(viewerActivator)是個鏈接,窗
口類型屬于彈出型,窗口大小為300x400,用戶在鏈接中看到的內容是“Click here(點擊這里)”。
Java開發商還可以創造新的輕型組件。例如,這樣的組件可能為幫助話題添加動畫和多媒體功能。
要求抽象查看的輕型組件必須執行javax.javahelp.impl.ViewAwareComponen。這些組件執行setViewData()
方法。這個組件能夠根據抽象查看中的信息決定它所執行的環境。(注意:要訪問抽象查看,您應該使用JavaHelp
API。)在列表B中,文檔對象下面的編碼片斷來自于抽象查看。
需要更多關于創造Java輕型組件的信息,請參閱相關文件。
JavaHelp編寫工具
有很多通過商業途徑可以得到的編寫工具能夠為您的應用程序編寫和維護一個完美的幫助系統。最有名的三個是Software7
Gmbh的Helen
1.5、Solutionsoft的HelpBreeze和Pivotonic的JawaHelpAuthor。所有這些第三方產品都支持Java 2
和Java 1.1標準。需要更多關于編寫工具的信息,請參閱Sun的幫助編寫工具頁面。
試試看吧
如果JavaHelp聽起來像是一個您認為您的用戶和伙伴開發商都喜歡的系統的話,那么從Sun Microsystem公司的網站上立刻下載吧。這個地址提供了安裝過程所需要的所有信息。
Linux下的庫文件分為共享庫和靜態庫兩大類,它們兩者的差別僅在程序執行時所需的代碼是在運行時動態加載的,
還是在編譯時靜態加載的。區分庫類型最好的方法是看它們的文件后綴,通常共享庫以.so(Shared Object的縮寫)結尾,
靜態鏈接庫通常以.a結尾(Archive的縮寫)。在終端缺省情況下,共享庫通常為綠色,而靜態庫為黑色。
庫操作命令
Linux庫操作可以使用命令完成,目前常用的命令是ldd和ldconfig。
1.ldd
ldd是Library Dependency Display縮寫,它的作用是顯示一個可執行程序必須使用的共享庫。
$ ldd /usr/bin/mesg
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7eaf000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7feb000)
2.ldconfig
庫安裝到系統以后,為了讓動態鏈接庫為系統所認識及共享,就需要運行ldconfig。ldconfig命令的用途,
主要是在默認搜尋目錄(/lib和/usr/lib)以及動態庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動態鏈接庫(格式如lib*.so*),
進而創建出動態裝入程序(ld.so)所需的連接和緩存文件。緩存文件默認為/etc/ld.so.cache,此文件保存已排好序的動態鏈接庫名字列表,
ldconfig通常在系統啟動時運行,而當用戶安裝了一個新的動態鏈接庫時,就需要手工運行這個命令。
(1)命令格式
ldconfig [選項] [libs]
(2)主要選項
-v或–verbose ldconfig將顯示正在掃描的目錄、搜索到的動態鏈接庫,以及它所創建的連接的名字。
-f CONF 指定動態鏈接庫的配置文件為CONF,系統默認為/etc/ld.so.conf。
-C CACHE 指定生成的緩存文件為CACHE,系統默認的是/etc/ld.so.cache,文件存放已排好序的可共享的動態鏈接庫的列表。
-p或–print-cache 讓ldconfig打印出當前緩存文件所保存的所有共享庫的名字。
-r ROOT 改變應用程序的根目錄為ROOT。
-n ldconfig僅掃描命令行指定的目錄,不掃描默認目錄(/lib、/usr/lib),也不掃描配置文件/etc/ld.so.conf所列的目錄。
運行沒有選項的ldconfig命令時,用于更新高速緩沖文件。這個命令主要用于高速緩沖DNS服務器(Caching DNS Server)。
高速緩沖DNS服務器的原理是提供查詢的歷史記錄,并且利用這些記錄來提高查詢的效率。
當某個查詢是第一次被發送到高速緩沖DNS服務器時,高速緩沖DNS服務器就將此查詢的整個過程記錄下來,
在一定的時期內用它來回答所有相同的查詢,從而減少整個DNS系統的負擔并且提高查詢速度。
庫的升級
Linux系統軟件更新很快,新的核心幾乎每幾個星期就公布一次,其它軟件的更新也是非常頻繁。多數情況下,
盲目跟隨潮流的升級并不必要,如果確實需要新版本的特性時再升級。換句話說,不要為了升級而升級。
Linux系統中多數軟件都是用共享庫來編譯的,其中包含了在不同程序之間共享的公用子例程。
在運行某個程序時,如果看到如下信息:“Incompatible library version.”則表明需要將該庫升級到程序所需要的版本。
庫是向下兼容的,也就是說,用老版本庫編譯的程序可以在新安裝的版本庫上運行,反之則不行。
Linux庫函數的升級是一項重要的工作,往往與其它軟件包的升級有一定關聯作用,所以操作前一定要備份文件。
下面看一下如何把Glibc 2.2.4.13升級至2.3.2版本,其過程如下:
1.下載.gz壓縮文件并解壓
在GUN C網站下載的四個.gz壓縮文件,解壓至一臨時目錄中:
cd /usr/caolinux
tar xzvf glibc-2.3.2.tar.gz
cd glibc-2.3.2
tar xzvf ../glibc-linuxthreads-2.3.2.tar.gz
tar xzvf ../glibc-crypt-2.3.2.tar.gz
tar xzvf ../glibc-localedata-2.3.2.tar.gz
2.建立庫函數的安裝目錄
mkdir /usr/higlibc
cd /usr/higlibc
3.建立編譯目錄
mkdir cao
cd cao
./configure –enable-add-ons=linuxthreads,crypt,localedata -prefix=/usr/higlibc
4.編譯與安裝
make
make check
make install
5.改變數據庫的鏈接
ln -s /usr/higlibc/lib/ld-linux.so.2 /lib/ld-linux.so.2
然后,修改/etc/ld.so.conf,加入一行/usr/higlibc/lib,執行下面代碼:
ldconfig -v
更新/etc/ld.so.cache的內容,列出每個庫的版本號,掃描目錄和所要創建及更新的鏈接。
6.更改GCC設置
cd /usr/lib/gcc-lib
cp -r i386-redhat-linux higlibc
7.更新符號鏈接
cd /usr/higlibc/include
ln -s /usr/src/linux/include/linux
ln -s /usr/src/linux/include/asm
ln -s /usr/X11R6/include/X11
8.測試并完成
在Windows下,大家應該知道系統里面有很多服務,掌控著系統中各個設備和功能的啟動,停止,暫停等操作。
在Ubuntu下,自然也是一樣,只不過Linux下對服務的管理,要比windows高級N多,也細致很多。
因此linux的服務這部分,一直讓許多新人們望而卻步。
這次的教程,我將推薦給大家一個Ubuntu下的圖形化的,管理系統服務的軟件。名字叫:Boot-Up Manager,簡稱:BUM。
一. 基礎知識補充
在Linux系統下,各個服務都是運行在一定的”運行級別“下的。我們先來認識下運行級別,在Linux系統下,系統有6個級別,分別是:
*運行等級 S:開機進程中的第一個運行等級。
*運行等級 1:(single-user)單用戶模式。為單用戶模式,就像Win9x 下的安全模式類似。
*運行等級 2,3,4,5: multi-user多用戶環境,細分的話,是:
(2) 為多用戶模式,但是沒有NFS 支持。
(3) 為完整的多用戶模式,是標準的運行級。
(4) 一般不用,在一些特殊情況下可以用它來做一些事情。
例如在筆記本電腦的電池用盡時,可以切換到這個模式來做一些設置。
(5) 就是 X11 ,進到 X Window 系統了。
*運行等級 0:(halt)關閉計算機
*運行等級 6:(reboot)重起計算機
我們以Ubuntu Linux為例,大家可以在 /etc/目錄下找到類似: rcS.d,rc1.d,rc2.d等等這樣的文件夾,應該是有 7 個。
這些文件夾當中,就是用來存儲在相應(數字)等級下要運行(或者不運行)的服務的”鏈接“。大家可以隨便著一個進去看看,
它里面的文件應該都是在左上角帶一個”箭頭“的。這些文件具體的鏈接,都是統一的,指向: /etc/init.d/ 這個文件夾下的文件。
這7個rc*.d文件下的文件,有個共性,就是:若文件夾下的鏈接文件開頭子母是大寫的,那么它鏈接的在 /etc/init.d 下的對應腳本將被調用并開啟,
該進程將被執行。 相反,如果是小寫字母,則代表該服務不會被運行。
此外,鏈接文件的開頭S(start)或K(kill)后緊接的數字是指運行的順序,數字小的運行在前。
二.對系統服務的“控制”
由上面的內容,我們應該知道,其實想開啟,關閉一個服務,只需要將運行級的鏈接文件名的第一個字母由大寫改為小寫 (S–>s,K–>k)。
或者,我們先說我這次的教程推薦的“圖形化”控制方式。
1. BUM 的安裝: sudo apt-get install bum ,回車就是了,這個沒什么問題的
2. BUM 的運行: 這個軟件安裝后,“應用程序”里面沒有快捷方式的。可以從終端里面輸入:sudo bum 來運行
3. BUM 的使用: 我們先來看看他的界面吧,每次運行,它都會先掃描系統的服務項目,掃描完成就是這個樣子。
然后,我們勾選:Advanced,切換到“高級”模式,然后選擇”Services“,就能看到我們當前系統的”服務“了。
這個軟件使用很簡單,如果我們要禁用某個服務,在列表中找到它,然后去掉前面的“勾”,點擊“應用”就行了。
夠簡單吧?這個軟件,除了可以控制服務的開啟和關閉,還能控制系統的“開關機腳本(Startup and shutdown scripts),
操作方法一樣的,有需要的兄弟們可以看下。
4. 用”命令“的方法來控制服務。
剛才我們說過了,其實禁用某個服務,就是把 rc*.d下的對應文件,開頭字母改成小寫。因此我們可以這樣做,比如我要禁用”mdadm-raid”這個服務,
它是管理系統的 Raid(磁盤陣列)的,如果你沒有陣列,自然不需要了。
sudo mv /etc/rcS.d/S04mdadm-raid /etc/rcS.d/s04mdadm-raid
估計喜歡玩“命令”的人,肯定都會選擇這樣做吧,呵呵,命令控們~
5. 系統服務的常見”操作“。在linux系統里面,如果你需要暫時性的對某個服務的運行狀態進行操作,一般都可以這樣操作:
(1)運行服務: sudo /etc/init.d/服務名 start
(2)停止服務: sudo /etc/init.d/服務名 stop
(3)重啟服務: sudo /etc/init.d/服務名 restart
比如:sudo /etc/init.d/gdm restart
Debug
啟動 Debug,它是可用于測試和調試 MS-DOS 可執行文件的程序。
Debug [[drive:][path] filename [parameters]]
參數
[drive:][path] filename
指定要測試的可執行文件的位置和名稱。
parameters
指定要測試的可執行文件所需要的任何命令行信息。
++
說明
使用 Debug 命令但不指定要測試的文件
如果使用沒有位置和文件名的 Debug 命令,然后鍵入所有的 Debug 命令以響應 Debug 提示符,連字符 (-)。
Debug 命令
以下是 Debug 命令列表:
? 顯示 Debug 命令列表。
a 匯編 8086/8087/8088 記憶碼。
c 比較內存的兩個部分。
d 顯示部分內存的內容。
e 從指定地址開始,將數據輸入到內存。
f 使用指定值填充一段內存。
g 運行在內存中的可執行文件。
h 執行十六進制運算。
i 顯示來自特定端口的 1 字節值。
l 將文件或磁盤扇區內容加載到內存。
m 復制內存塊中的內容
/n 為 l 或 w 命令指定文件,或者指定正在測試的文件的參數。
o 向輸出端口發送 1 個字節的值。
p 執行循環、重復的字符串指令、軟件中斷或子例程。
q 停止 Debug 會話。
r 顯示或改變一個或多個寄存器。
s 在部分內存中搜索一個或多個字節值的模式。
t 執行一條指令,然后顯示所有寄存器的內容、所有標志的狀態和 Debug 下一步要執行的指令的解碼形式。
u 反匯編字節并顯示相應的原語句。
w 將被測試文件寫入磁盤。
xa 分配擴展內存。
xd 釋放擴展內存。
xm 映射擴展內存頁。
xs 顯示擴展內存的狀態。
分隔命令參數
所有 Debug 命令都接受參數,除了 q 命令之外。可以用逗號或空格分隔參數,但是只有在兩個十六進制值之間才需要這些分隔符。因此,以下命令等價:
dcs:100 110
d cs:100 110
d,cs:100,110
指定有效地址項
Debug 命令中的 address 參數指定內存位置。Address
是一個包含字母段記錄的二位名稱或一個四位字段地址加上一個偏移量。可以忽略段寄存器或段地址。a,g,l,t,u 和 w 命令的默認段是
CS。所有其他命令的默認段是 DS。所有數值均為十六進制格式。
有效地址如下:
CS:0100
04BA:0100
在段名和偏移量之間要有冒號。
指定有效范圍項
Debug 命令中的 range 參數指定了內存的范圍。可以為 range 選擇兩種格式:起始地址和結束地址,或者起始地址和長度范圍(由 l 表示)。
例如,下面的兩個語法都可以指定從 CS:100 開始的 16 字節范圍:
cs:100 10f
cs:100 l 10
++
Debug 子命令
選擇 Debug 命令以獲得詳細信息。
Debug:A(匯編)
Debug:C(比較)
Debug(轉儲)
Debug:E(鍵入)
Debug:F(填充)
Debug:G(轉向)
Debug:H(十六進制)
Debug:I(輸入)
Debug:L(加載)
Debug:M(移動)
Debug:N(名稱)
Debug:O(輸出)
Debug:P(執行)
Debug:Q(退出)
Debug:r(寄存器)
Debug:s(搜索)
Debug:T(跟蹤)
Debug:U(反匯編)
Debug:W(寫入)
Debug:XA(分配擴展內存)
Debug:XD(取消分配擴展內存)
Debug:XM(映射擴展內存頁)
Debug:XS(顯示擴展內存狀態)
***********************Debug子命令******************************
Debug:A(匯編)
直接將 8086/8087/8088 記憶碼合并到內存。
該命令從匯編語言語句創建可執行的機器碼。所有數值都是十六進制格式,必須按一到四個字符輸入這些數值。在引用的操作代碼(操作碼)前指定前綴記憶碼。
a [address]
參數
address
指定鍵入匯編語言指令的位置。對 address 使用十六進制值,并鍵入不以“h”字符結尾的每個值。如果不指定地址,a 將在它上次停止處開始匯編。
有關將數據輸入到指定字節中的信息,請單擊“相關主題”列表中的 Debug E(鍵入)。
有關反匯編字節的信息,請單擊“相關主題”列表中的 Debug U(反匯編)。
范例
a 命令支持所有形式的間接注冊命令,如下例所示:
add bx,34[bp+2].[si-1]
pop [bp+di]
push [si] )
還支持所有操作碼同義詞,如下例所示:
loopz 100
loope 100
ja 200
jnbe 200
對于 8087 操作碼,必須指定 wait 或 fwait 前綴,如下例所示:
fwait fadd st,st(3) ; this line assembles
; an fwait prefix
說明
使用記憶碼
段的替代記憶碼為 cs:、ds:、es: 和 ss:。遠程返回的記憶碼是
retf。字符串處理的記憶碼必須明確聲明字符串大小。例如,使用 movsw 可以移動 16 位的字串,使用
mov***(文字因故被系統屏蔽)***(文字因故被系統屏蔽) 可以移動 8 位字節串。
匯編跳轉和調用
匯編程序根據字節替換自動將短、近和遠的跳轉及調用匯編到目標地址。通過使用 near 或 far 前綴可以替代這樣的跳轉或調用,如下例所示:
-a0100:0500
0100:0500 jmp 502 ; a 2-byte short jump
0100:0502 jmp near 505 ; a 3-byte near jump
0100:0505 jmp far 50a ; a 5-byte far jump
可以將 near 前綴縮寫為 ne。
區分字和字節內存位置
當某個操作數可以引用某個字內存位置或者字節內存位置時,必須用前綴 word ptr 或者前綴 byte ptr 指定數據類型。可接受的縮寫分別是 wo 和 by。以下范例顯示兩種格式:
dec wo [si]
neg byte ptr [128]
指定操作數
Debug 使用包括在中括號 ([ ]) 的操作數引用內存地址的習慣用法。這是因為另一方面 Debug 不能區分立即操作數和內存地址的操作數。以下范例顯示兩種格式:
mov ax,21 ; load AX with 21h
mov ax,[21] ; load AX with the
; contents of
; memory location 21h
使用偽指令
使用 a 命令提供兩個常用的偽指令:db 操作碼,將字節值直接匯編到內存,dw 操作碼,將字值直接匯編到內存。以下是兩個偽指令的范例:
db 1,2,3,4,\"THIS IS AN EXAMPLE\"
db THIS IS A QUOTATION MARK:\"
db \"THIS IS A QUOTATION MARK:\"
dw 1000,2000,3000,\"BACH\"
Debug:C(比較)
比較內存的兩個部分。
c range address
參數
range
指定要比較的內存第一個區域的起始和結束地址,或起始地址和長度。有關有效的 range 值的信息,請單擊“相關主題”列表中的“Debug 說明”。
address
指定要比較的第二個內存區域的起始地址。有關有效 address 值的信息,請單擊“相關主題”列表中的“Debug 說明”。
++
范例
以下命令具有相同效果:
c100,10f 300
c100l10 300
每個命令都對 100h 到 10Fh 的內存數據塊與 300h 到 30Fh 的內存數據塊進行比較。
Debug 響應前面的命令并顯示如下信息(假定 DS = 197F):
197F:0100 4D E4 197F:0300
197F:0101 67 99 197F:0301
197F:0102 A3 27 197F:0302
197F:0103 35 F3 197F:0303
197F:0104 97 BD 197F:0304
197F:0105 04 35 197F:0305
197F:0107 76 71 197F:0307
197F:0108 E6 11 197F:0308
197F:0109 19 2C 197F:0309
197F:010A 80 0A 197F:030A
197F:010B 36 7F 197F:030B
197F:010C BE 22 197F:030C
197F:010D 83 93 197F:030D
197F:010E 49 77 197F:030E
197F:010F 4F 8A 197F:030F
注意列表中缺少地址 197F:0106 和 197F:0306。這表明那些地址中的值是相同的。
++
說明
如果 range 和 address 內存區域相同,Debug 將不顯示任何內容而直接返回到 Debug 提示符。如果有差異,Debug 將按如下格式顯示:
address1 byte1 byte2 addess2
++++
Debug(轉儲)
顯示一定范圍內存地址的內容。
d [range]
參數
range
指定要顯示其內容的內存區域的起始和結束地址,或起始地址和長度。有關有效的 range
值的信息,請單擊“相關主題”列表中的“Debug 說明”。如果不指定 range,Debug 程序將從以前 d
命令中所指定的地址范圍的末尾開始顯示 128 個字節的內容。
有關顯示寄存器內容的信息,請單擊“相關主題”列表中的 Debug R(寄存器)。
++
范例
假定鍵入以下命令:
dcs:100 10f
Debug 按以下格式顯示范圍中的內容:
04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SAWYER......
如果在沒有參數的情況下鍵入 d 命令,Debug 按以前范例中所描述的內容來編排顯示格式。顯示的每行以比前一行的地址大 16 個字節(如果是顯示 40 列的屏幕,則為 8 個字節)的地址開頭。
對于后面鍵入的每個不帶參數的 d 命令,Debug 將緊接在最后顯示的命令后立即顯示字節內容。
如果鍵入以下命令,Debug 將從 CS:100 開始顯示 20h 個字節的內容:
dcs:100 l 20
如果鍵入以下命令,Debug 將顯示范圍從 CS 段的 100h 到 115h 中所有字節的內容:
dcs:100 115
++
說明
當使用 d 命令時,Debug 以兩個部分顯示內存內容:十六進制部分(每個字節的值都用十六進制格式表示)和
ASCII 碼部分(每個字節的值都用 ASCII 碼字符表示)。每個非打印字符在顯示的 ASCII 部分由句號 (.) 表示。每個顯示行顯示
16 字節的內容,第 8 字節和第 9 字節之間有一個連字符。每個顯示行從 16 字節的邊界上開始。
++
Debug:E(鍵入)
將數據輸入到內存中指定的地址。
可以按十六進制或 ASCII 格式鍵入數據。以前存儲在指定位置的任何數據全部丟失。
e address
參數
address
指定輸入數據的第一個內存位置。
list
指定要輸入到內存的連續字節中的數據。
有關集成記憶碼的信息,請單擊“相關主題”列表中的 Debug A(匯編)。
有關顯示內存部分內容的信息,請單擊“相關主題”列表中的 Debug D (轉儲)。
++
范例
假定鍵入以下命令:
ecs:100
Debug 按下面的格式顯示第一個字節的內容:
04BA:0100 EB.
要將該值更改為 41,請在插入點鍵入 41,如下所示:
04BA:0100 EB.41_
可以用一個 e 命令鍵入連續的字節值。在鍵入新值后按 SPACEBAR(空格鍵),而不是按 ENTER 鍵。Debug 顯示下一個值。在此范例中,如果按三次 SPACEBAR(空格鍵),Debug 將顯示下面的值:
04BA:0100 EB.41 10. 00. BC._
要將十六進制值 BC 更改為 42,請在插入點鍵入 42,如下所示:
04BA:0100 EB.41 10. 00. BC.42_
假定決定值 10 應該是 6F。要糾正該值,請按 HYPHEN 鍵兩次以返回到地址 0101(值 10)。Debug 顯示以下內容:
04BA:0100 EB.41 10. 00. BC.42-
04BA:0102 00.-
04BA:0101 10._
在插入點鍵入 6f 更改值,如下所示:
04BA:0101 10.6f_
按 ENTER 停止 e 命令并返回到 Debug 提示符下。
以下是字符串項的范例:
eds:100 \"This is the text example\"
該字符串將從 DS:100 開始填充 24 個字節。
++
說明
使用 address 參數
如果在沒有指定可選的 list 參數的值情況下指定 address 的值,Debug 將顯示地址和內容,在下一行重復地址,并等待您的輸入。此時,您可以執行下列操作之一:
· 替換字節值。為此,請在當前值后鍵入新值。如果您鍵入的值不是有效的十六進制值,或該值包含兩個以上的數字,則 Debug 不會回顯無效或額外的字符。
· 進入下一個字節。為此,請按 SPACEBAR(空格鍵)。要更改該字節中的值,請在當前值后鍵入新值。如果按 SPACEBAR(空格鍵)時,移動超過了 8 位界限,Debug 程序將顯示新的一行并在行首顯示新地址。
· 返回到前一個字節。為此,請按 HYPHEN 鍵 (-)。可以反復按 HYPHEN 鍵 (-) 向后移動超過多個字節。在按 HYPHEN 時,Debug 開始新行并顯示當前地址和字節值。
· 停止執行 e 命令。為此,請按 ENTER 鍵。在任何字節位置都可以按 ENTER。
使用 list 參數
如果指定 list 參數的值,隨后的 e 命令將使用列表中的值替換現有的字節值。如果發生錯誤,將不更改任何字節值。
List 值可以是十六進制字節或字符串。使用空格、逗號或制表符來分隔值。必須將字符串包括在單或雙引號中。
++++
Debug:F(填充)
使用指定的值填充指定內存區域中的地址。
可以指定十六進制或 ASCII 格式表示的數據。任何以前存儲在指定位置的數據將會丟失。
f range list
參數
range
指定要填充內存區域的起始和結束地址,或起始地址和長度。關于有效的 range 值的信息,請單擊“相關主題”列表中的“Debug 說明”。
list
指定要輸入的數據。List 可以由十六進制數或引號包括起來的字符串組成。
++
范例
假定鍵入以下命令:
f04ba:100l100 42 45 52 54 41
作為響應,Debug 使用指定的值填充從 04BA:100 到 04BA:1FF 的內存位置。Debug 重復這五個值直到 100h 個字節全部填滿為止。
++
說明
使用 range 參數
如果 range 包含的字節數比 list 中的數值大,Debug 將在 list 中反復指派值,直到 range 中的所有字節全部填充。
如果在 range 中的任何內存損壞或不存在,Debug 將顯示錯誤消息并停止 f 命令。
使用 list 參數
如果 list 包含的數值多于 range 中的字節數,Debug 將忽略 list 中額外的值。
Debug:G(轉向)
運行當前在內存中的程序。
g [=address] [breakpoints]
參數
=address
指定當前在內存中要開始執行的程序地址。如果不指定 address,Windows 2000 將從 CS:IP 寄存器中的當前地址開始執行程序。
breakpoints
指定可以設置為 g 命令的部分的 1 到 10 個臨時斷點。
有關執行循環、重復的字符串指令、軟件中斷或子程序的信息,請單擊“相關主題”列表中的 Debug P(執行)。
有關執行指令的信息,請單擊“相關主題”列表中的 Debug T(跟蹤)。
范例
假定鍵入以下命令:
gcs:7550
Windows 2000 運行當前內存中的程序,直到執行到 CS 段中的斷點地址 7550 為止。Debug 將顯示寄存器的內容和標志的狀態并結束 g 命令。
以下命令設置兩個斷點:
gcs:7550, cs:8000
如果在 Debug 遇到斷點之后再次鍵入 g 命令,將從在斷點之后的指令開始執行,而不是在通常的開始地址執行。
++
說明
使用 address 參數
必須在 address 參數之前使用等號 (=) 以區分開始地址 (address) 和斷點地址 (breakpoints)。
指定斷點
程序在它遇到的第一個斷點處停止,而不論您在 breakpoint 列表的什么位置鍵入斷點。Debug 在每個斷點處用中斷代碼代替原始指令。
當程序到達斷點時,Debug 將所有斷點地址恢復到它們的最初指令并顯示所有寄存器的內容、所有標記的狀態以及最后執行指令的解碼形式。Debug 顯示的信息與使用 Debug r(寄存器)命令并指定斷點時所顯示的信息相同。
如果不在斷點處停止程序,Debug 程序將不使用原始指令替換中斷代碼。
設置斷點的限制
可以只在包含 8086 操作代碼(操作碼)的第一個字節的地址上設置斷點。如果設置了 10 個以上的斷點,Debug 將顯示以下信息:
bp error
對用戶堆棧指針的要求
用戶堆棧指針必須有效且必須有 6 個字節可用于 g 命令。該命令使用 iret 指令跳轉到正在被測試的程序。Debug
設置用戶堆棧指針并將用戶標志、代碼段寄存器和指令指針壓入用戶堆棧。(如果用戶堆棧無效或太小,操作系統可能會失敗。)Debug
在指定的斷點處設置中斷代碼 (0CCh)。
重新啟動程序
不要在 Windows 2000 顯示以下消息后嘗試重新啟動程序;
Program terminated normally
要正確地運行程序,必須通過使用 Debug n(名稱)和 l(加載)命令重新加載該程序。
++++
Debug:H(十六進制)
對指定的兩個參數執行十六進制運算。
h value1 value2
參數
value1
代表從 0 到 FFFFh 范圍內的任何十六進制數字。
value2
代表從 0 到 FFFFh 范圍內第二個十六進制數字。
++
范例
假定鍵入以下命令:
h19f 10a
Debug 執行運算并顯示以下結果。
02A9 0095
++
說明
Debug 首先將指定的兩個參數相加,然后從第一個參數中減去第二個參數。這些計算的結果顯示在一行中:先計算和,然后計算差。
++++
Debug:I(輸入)
從指定的端口讀取并顯示一個字節值。
i port
參數
port
按地址指定輸入端口。地址可以是 16 位的值。
有關將字節值發送到輸出端口的信息,請單擊“相關主題”列表中的 Debug O(輸出)。
++
范例
假定鍵入以下命令:
i2f8
同時假定端口的字節值是 42h。Debug 讀取該字節,并將其值顯示如下:
42
++
Debug:L(加載)
將某個文件或特定磁盤扇區的內容加載到內存。
要從磁盤文件加載 BX:CX 寄存器中指定的字節數內容,請使用以下語法:
l [address]
要略過 Windows 2000 文件系統并直接加載特定的扇區,請使用以下語法:
l address drive start number
參數
address
指定要在其中加載文件或扇區內容的內存位置。如果不指定 address,Debug 將使用 CS 寄存器中的當前地址。
drive
指定包含讀取指定扇區的磁盤的驅動器。該值是數值型:0 = A, 1 = B, 2 = C 等。
start
指定要加載其內容的第一個扇區的十六進制數。
number
指定要加載其內容的連續扇區的十六進制數。只有要加載特定扇區的內容而不是加載 debug 命令行或最近的 Debug n(名稱)命令中指定的文件時,才能使用 drive、start 和 number 參數。
有關指定用于 l 命令的文件的信息,請單擊“相關主題”列表中的 Debug n(名稱)。
有關寫入調試到磁盤的文件的信息,請單擊“相關主題”列表中的 Debug w(寫入)。
++
范例
假定啟動 Debug 并鍵入以下命令:
nfile.com
現在可以鍵入 l 命令以加載 File.com。Debug 將加載文件并顯示 Debug 提示符。
假定需要從驅動器 C 將起始邏輯扇區為 15 (0Fh) 的 109 (6Dh) 個扇區的內容加載到起始地址為 04BA:0100 的內存中。為此,請鍵入以下命令:
l04ba:100 2 0f 6d
++
注意
使用不帶參數的 l 命令
當使用不帶參數的 l 命令時,在 debug
命令行上指定的文件將加載到內存中,從地址 CS:100 開始。Debug 同時將 BX 和 CX 寄存器設置為加載的字節數。如果不在
debug 命令行指定文件,所裝入的文件將是最近使用 n 命令經常指定的文件。
使用具有 address 參數的 1 命令
如果使用帶 address 參數的 l 命令,Debug 將從內存位置 address 開始加載文件或指定扇區的內容。
使用帶全部參數的 l 命令
如果使用帶所有參數的 l 命令,Debug 將加載指定磁盤扇區的內容而不是加載文件。
加載特定扇區的內容
指定范圍內的每個扇區均從 drive 讀取。Debug 從 start 開始加載,直到在 number 中指定的扇區數中的內容全部被加載。
加載 .exe 文件
Debug 忽略 .exe 文件的地址 address 參數。如果指定 .exe 文件,Debug
將文件重新定位到 .exe 文件的標題中指定的加載地址。在 .exe 文件被加載到內存前,標題自身從 .exe 文件脫離,因此磁盤上的
.exe 文件大小與內存中的不同。如果要檢查整個 .exe 文件,請使用不同的擴展名重命名文件。
打開十六進制文件
Debug 將具有 .hex 擴展名的文件認為十六進制格式文件。鍵入不帶參數的 l
命令,可以加載從十六進制文件中指定的地址處開始的十六進制文件。如果鍵入的 l 命令包含 address 參數,Debug
將把指定的地址加到在十六進制文件中找到的地址上,以確定起始地址。
Debug:M(移動)
將一個內存塊中的內容復制到另一個內存塊中。
m range address
參數
range
指定要復制內容的內存區域的起始和結束地址,或起始地址和長度。
address
指定要將 range 內容復制到該位置的起始地址。
++
范例
假定鍵入以下命令:
mcs:100 110 cs:500
Debug 首先將 CS:110
地址中的內容復制到地址 CS:510 中,然后將 CS:10F 地址中的內容復制到 CS:50F 中,如此操作直至將 CS:100
地址中的內容復制到地址 CS:500 中。要查看結果,請使用 Debug d(轉儲)命令,并使用 m 命令指定目標地址。
++
說明
復制操作對現有數據的影響
如果新數據沒有寫入正在被復制的數據塊中的地址,則源數據將保持不變。但是,如果目標塊已經包含數據(就象它在覆蓋副本操作中一樣),則將改寫該數據。(覆蓋復制操作是指那些目標數據塊部分內容覆蓋原數據塊部分內容的操作。)
執行覆蓋復制操作
m
命令執行目標地址的覆蓋復制操作,而不丟失數據。將改寫的地址內容首先復制。因此,如果將較高位地址的數據復制到較低位地址,則復制操作從原塊的最低位地
址開始并向最高位地址進行。反之,如果要將數據從低地址復制到高地址,復制操作從原塊的最高地址開始,向最低地址進行。
++++
Debug:N(名稱)
指定 Debug l(加載)或 w(寫入)命令的可執行文件的名稱,或者指定正在調試的可執行文件的參數。
n [drive:][path] filename
要指定測試的可執行文件的參數,請使用以下語法:
n file-parameters
參數
如果在沒有參數的情況下使用,則 n 命令清除當前規范。
[drive:][path] filename
指定要測試的可執行文件的位置和名稱。
file-parameters
為正在測試的可執行文件指定參數和開關。
有關將文件或指定磁盤扇區的內容加載到內存中的信息,請單擊“相關主題”列表中的 Debug L(加載)。
有關寫入調試到磁盤的文件的信息,請單擊“相關主題”列表中的 Debug W(寫入)。
++
范例
假定已經啟動 Debug,并加載了正在調試的程序 Prog.com。接著您決定為 Prog.com 指定兩個參數并運行此程序。以下是此范例的命令序列:
debug prog.com
nparam1 param2
g
在這種情況下,Debug g(轉向)命令會運行該程序,就好像您已在 Windows 2000 命令提示符后鍵入了如下命令:
prog param1 param2
所以,測試和調試反映 Prog.com 通常的運行時間環境。
在下面的命令序列中,第一個 n 命令將 File1.exe 指定為后接的 l(加載)命令的文件,該命令將 File1.exe
加載到內存。第二個 n 命令指定 File1.exe 將使用的參數。最后,g 命令將運行 File1.exe 文件,就好像您在 Windows
2000 命令行中鍵入了 File1 File2.dat File2.dat 一樣。
nfile1.exe
l
nfile2.dat file3.dat
g
注意
· 不要在 n 命令的第二種形式后使用 l 命令。還要注意,如果現在使用 w(寫入)命令,Windows 2000
將使用名稱 File2.dat 保存正在調試的文件 File1.exe。為避免出現此結果,應該總是在 l 或 w 命令之前立即使用 n
命令的第一種形式。
++
說明
n 命令的兩個用途
可以按兩種方式使用 n 命令。首先,您可以使用它以指定后面的 l(加載)或
w(寫入)命令所使用的文件。如果在沒有命名所調試文件的情況下啟動 Debug,必須在使用 l 命令加載文件之前使用命令 nfilename。在
CS:5C 為文件控制塊 (FCB) 正確編排文件名的格式。其次,可以使用 n 命令指定被調試文件的命令行參數和開關。
內存區域
以下四個內存區域都會受到 n 命令的影響:
內存位置 內容
CS:5C 文件 1 的文件控制數據塊 (FCB)
CS:6C 文件 2 的文件控制數據塊 (FCB)
CS:80 n 命令行的長度(以字符表示)
CS:81 n 命令行字符的開頭
為 n 命令指定的第一個文件名被放在 CS:5C 的 FCB 中。如果指定第二個文件名,此名稱將放置到 CS:6C 的 FCB 中。n
命令行上鍵入的字符數(除第一個字符之外,n)存儲在位置 CS:80。n 命令行上的實際字符(再次,除了字母 n 之外)存儲在以 CS:81
開頭的位置。注意這些字符可以是在 Windows 2000 命令提示符下鍵入的命令中有效的任何開關和分隔符。
++++
Debug:O(輸出)
將字節值發送到輸出端口。
o port byte-value
參數
port
通過地址指定輸出端口。端口地址可以是 16 位值。
byte-value
指定要指向 port 的字節值。
有關從輸入端口讀取字節值的信息,請單擊“相關主題”列表中的 Debug I(輸入)。
++
范例
要將字節值 4Fh 發送到地址為 2F8h 的輸出端口,請鍵入以下命令:
o2f8 4f
++++
Debug:P(執行)
執行循環、重復的字符串指令、軟件中斷或子例程;或通過任何其他指令跟蹤。
p [= address] [number]
參數
=address
指定第一個要執行指令的位置。如果不指定地址,則默認地址是在 CS:IP 寄存器中指定的當前地址。
number
指定在將控制返回給 Debug 之前要執行的指令數。默認值為 1。
有關運行當前在內存中程序的信息,請單擊“相關主題”列表中的 Debug G(轉向)。
有關執行指令的信息,請單擊“相關主題”列表中的 Debug T(跟蹤)。
++
范例
假定正在測試的程序在地址 CS:143F 處包含一個 call 指令。要運行 call 目標位置的子程序然后將控制返回到 Debug,請鍵入以下命令:
p=143f
Debug 按以下格式顯示結果:
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC
2246:1442 7505 JNZ 144A
++
說明
將控制傳送到要測試的程序
當 p 命令將控制從 Debug 傳送到要測試的程序時,該程序不間斷運行,直到循環、重復字符串指令、軟件中斷或者完成了指定地址的子例程為止,或者直到執行了指定數量的機器指令為止。控制返回到 Debug。
地址參數的限制
如果 address 參數沒有指定段,Debug 將使用被測試程序的 CS 寄存器。如果省略
address,程序將從 CS:IP 寄存器所指定的地址開始執行。必須在 address 參數之前使用等號 (=) 以便將它與 number
參數區分。如果在指定地址處的指令不是循環、重復的字符串指令、軟件中斷或子例程,則 p 命令與 Debug t(跟蹤)命令的作用相同。
使用 p 命令顯示的郵件
當 p 執行完一段說明后,Debug 顯示出程序的寄存器內容、標志的狀態以及下一段將要被執行的指令的解碼形式。
警告
· 不能使用 p 命令跟蹤只讀內存 (ROM)。
Debug:Q(退出)
停止 Debug 會話,不保存當前測試的文件。
當您鍵入 q 以后,控制返回到 Windows 2000 的命令提示符。
q
參數
該命令不帶參數。
有關保存文件的信息,請單擊“相關主題”列表中的 Debug W(寫入)。
++++
Debug:R(寄存器)
顯示或改變一個或多個 CPU 寄存器的內容。
r [register-name]
參數
無
如果在沒有參數的情況下使用,則 r 命令顯示所有寄存器的內容以及寄存器存儲區域中的標志。
register-name
指定要顯示其內容的寄存器名。
有關顯示內存部分內容的信息,請單擊“相關主題”列表中的 Debug D(轉儲)。
有關反匯編字節的信息,請單擊“相關主題”列表中的 Debug U(反匯編)。
++
范例
要查看所有寄存器的內容、所有標記的狀態和當前位置的指令解碼表,請鍵入以下命令:
r
如果當前位置是 CS:11A,顯示外觀將類似于以下內容:
AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000
DS=04BA ES=04BA SS=04BA CS=O4BA IP=011A NV UP DI NG NZ AC PE NC
04BA:011A CD21 INT 21
要只查看標志的狀態,請鍵入以下命令:
rf
Debug 按以下格式顯示信息:
NV UP DI NG NZ AC PE NC - _
現在,您可以按任意順序鍵入一個或多個有效的標志值,其中可以有或沒有空格,如下所示:
nv up di ng nz ac pe nc - pleicy
Debug 結束 r 命令并顯示 Debug 提示符。要查看更改,請鍵入 r 或 rf 命令。Debug 將顯示以下內容:
NV UP EI PL NZ AC PE CY - _
按 ENTER 返回到 Debug 提示符。
++
說明
使用 r 命令
如果指定了寄存器名稱,Windows 2000 將顯示以十六進制標記表示的寄存器的 16 位值,并將冒號顯示為提示符。如果要更改包含在寄存器中的值,除非鍵入新值并按 ENTER 鍵;否則,請按 ENTER 鍵返回 Debug 提示符。
有效寄存器名
以下是 register-name 的有效值:ax、bx、cx、dx、sp、bp、si、di、ds、es、ss、cs、ip、pc 及 f。ip 和 pc 都引用指令指針。
如果指定寄存器名稱,而不是從前面的列表中指定,Windows 2000 將顯示以下消息:
br error
使用 f 字符而不是寄存器名
如果鍵入 f 字符代替寄存器名,Debug 將每個標記的當前設置顯示為兩字母代碼,然后顯示 Debug 提示符。要更改標志的設置,請從下表中鍵入適當的兩字母代碼:
標志名 設置 清除
溢出 ov nv
方向 dn(減) up(增)
中斷 ei(啟用) di(禁用)
正負 ng(負) pl(正)
零 zr nz
輔助進位 ac na
奇偶校驗 pe(偶校驗) po(奇校驗)
進位 cy nc
可以按任何順序鍵入新的標志值。不需要在這些值之間留出空格。要停止 r 命令,請按 ENTER 鍵。任何沒有指定新值的標志保持不變。
用 r 命令顯示的郵件
如果為標記指定了多個值,Debug 將顯示以下消息:
df error
如果指定沒有在前面的表中列出的標志代碼,Debug 將顯示以下消息:
bf error
在這兩種情況下,Debug 將忽略所有在無效項目之后指定的設置。
Debug 的默認設置
在啟動 Debug 時,會將段寄存器設置到空閑內存的低端,指令指針設置為 0100h,清除所有標志,并且將其余寄存器設置為零,除了被設置為 FFEEh 的 sp 之外。
++++
Debug:S(搜索)
在某個地址范圍搜索一個或多個字節值的模式。
s range list
參數
range
指定要搜索范圍的開始和結束地址。有關 range 參數有效值的信息,請單擊“相關主題”列表中的 Debug。
list
指定一個或多個字節值的模式,或要搜索的字符串。用空格或逗號分隔每個字節值和下一個字節值。將字符串值包括在引號中。
++
范例
假定需要查找包含值 41 并且范圍從 CS:100 到 CS:110 的所有地址。為此,請鍵入以下命令:
scs:100 110 41
Debug 按以下格式顯示結果:
04BA:0104
04BA:010D
-
以下命令在 CS:100 到 CS:1A0 的范圍內搜索字符串“Ph”。
scs:100 1a0 \"Ph\"
++
說明
如果 list 參數包含多個字節值,Debug 將只顯示出現字節值的第一個地址。如果 list 只包含一個字節值,Debug 將顯示指定范圍內出現該值的所有地址。
++++
Debug:T(跟蹤)
執行一條指令,并顯示所有注冊的內容、所有標志的狀態和所執行指令的解碼形式。
t [=address] [number]
參數
=address
指定 Debug 啟動跟蹤指令的地址。如果省略 address 參數,跟蹤將從程序的 CS:IP 寄存器所指定的地址開始。有關 address 參數有效值的信息,請單擊“相關主題”列表中的 Debug。
number
指定要跟蹤的指令數。該值必須是十六進制數。默認值為 1。
有關執行循環、重復的字符串指令、軟件中斷或子例程的信息,請單擊“相關主題”列表中的 Debug P(執行)。
有關執行當前內存中程序的信息,請單擊“相關主題”列表中的 Debug G(轉向)。
++
范例
要執行一個指令(CS:IP 指向的指令),然后顯示寄存器的內容、標志的狀態以及指令的解碼形式,請鍵入以下命令:
t
如果程序中的指令位于 04BA:011A,Debug 可能顯示下列信息:
AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000
DS=04BA ES=04BA SS=04BA CS=O4BA IP=011A NV UP DI NG NZ AC PE NC
04BA:011A CD21 INT 21
++
說明
跟蹤只讀內存中的指令
t 命令使用 8086 或 8088 微處理器的硬件跟蹤模式。因此,也可以跟蹤存儲在只讀內存 (ROM) 中的指令。
使用地址參數
必須在 address 參數之前使用等號 (=) 以便將它與 number 參數區分。
Debug:U(反匯編)
反匯編字節并顯示相應的原語句,其中包括地址和字節值。反匯編代碼看起來象已匯編文件的列表。
u [range]
參數
無
如果在沒有參數的情況下使用,則 u 命令分解 20h 字節(默認值),從前面 u 命令所顯示地址后的第一個地址開始。
range
指定要反匯編代碼的起始地址和結束地址,或起始地址和長度。有關 range 參數有效值的信息,請單擊“相關主題”列表中的 Debug。
有關集成記憶碼的信息,請單擊“相關主題”列表中的 Debug A(匯編)。
有關顯示內存部分內容的信息,請單擊“相關主題”列表中的 Debug D(轉儲)。
++
范例
要反匯編 16 (10h) 字節,從地址 04BA:0100 開始,請鍵入以下命令:
u04ba:100l10
Debug 按以下格式顯示結果:
04BA:0100 206472 AND [SI+72],AH
04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B
04BA:0106 207370 AND [BP+DI+70],DH
04BA:0109 65 DB 65
04BA:010A 63 DB 63
04BA:010B 69 DB 69
04BA:010C 66 DB 66
04BA:010D 69 DB 69
04BA:010E 63 DB 63
04BA:010F 61 DB 61
如果只顯示從 04BA:0100 到 04BA:0108 特定地址的信息,請鍵入以下命令:
u04ba:0100 0108
Debug 顯示以下內容:
04BA:0100 206472 AND [SI+72],AH
04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B
04BA:0106 207370 AND [BP+DI+70],DH
++++
Debug:W(寫入)
將文件或特定分區寫入磁盤。
要將在 BX:CX 寄存器中指定字節數的內容寫入磁盤文件,請使用以下語法:
w [address]
要略過 Windows 2000 文件系統并直接寫入特定的扇區,請使用以下語法:
w address drive start number
參數
address
指定要寫到磁盤文件的文件或部分文件的起始內存地址。如果不指定 address,Debug 程序將從 CS:100 開始。關于 address 參數有效值的信息,請在“相關主題”列表中單擊 Debug。
drive
指定包含目標盤的驅動器。該值是數值型:0 = A, 1 = B, 2 = C,等等。
start
指定要寫入第一個扇區的十六進制數。
number
指定要寫入的扇區數。
有關指定用于 w 命令的文件的信息,請單擊“相關主題”列表中的 Debug N(名稱)。
有關將文件或文件扇區內容加載到內存中的信息,請單擊“相關主題”列表中的 Debug L(加載)。
范例
假定要將起始地址為 CS:100 的內存內容寫入到驅動器 B 的磁盤中。需要將數據從磁盤的邏輯扇區號 37h 開始并持續 2Bh 個扇區。為此,鍵入以下命令:
wcs:100 1 37 2b
當寫操作完成時,Debug 再次顯示 Debug 提示符。
++
說明
必須在啟動 Debug 時或者在最近的 Debug n(名稱)命令中指定磁盤文件的名字。這兩種方法都可以將地址 CS:5C 處文件控制塊的文件名正確地編排格式。
在使用不帶參數的 w 命令之前重新設置 BX:CX
如果使用了 Debug g(轉向)、t(跟蹤)、p(執行)或 r(寄存器)命令,必須在使用無參數的 w 命令之前,將 BX:CX 寄存器復位。
將修改后的文件寫入磁盤
如果修改文件但不更改文件名、長度或起始地址,Debug 仍然可以正確地將文件寫入源磁盤位置。
w 命令的限制
不能用該命令寫入 .exe 或 .hex 文件。
警告
· 因為略過 Windows 2000 文件句柄,所以寫入特定的分區非常危險。如果鍵入錯誤的值,則磁盤文件結構很容易被損壞。
++++
Debug:XA(分配擴展內存)
分配擴展內存的指定頁面數。
要使用擴展內存,必須安裝符合 4.0 版的 Lotus/Intel/Microsoft 擴展內存規范 (LIM EMS) 的擴展內存設備驅動程序。
xa [count]
參數
count
指定要分配的擴展內存的 16KB 頁數。
有關使用擴展內存的其他 Debug 命令的信息,請單擊“相關主題”列表中的 XD(釋放擴展內存)、XM(映射擴展內存頁)或 XS(顯示擴展內存狀態)。
++
范例
要分配擴展內存的 8 個頁面,請鍵入以下命令:
xa8
如果命令成功,Debug 將顯示類似的以下消息:
Handle created=0003
++
說明
如果指定的頁面數可用,則 Debug 將顯示消息,此消息表明所創建的句柄的十六進制數;否則,Debug 將顯示錯誤消息。
Debug:XD(釋放擴展內存)
釋放指向擴展內存的句柄。
要使用擴展內存,必須安裝符合 4.0 版的 Lotus/Intel/Microsoft 擴展內存規范 (LIM EMS) 的擴展內存設備驅動程序。
xd [handle]
參數
handle
指定要釋放的句柄。
有關使用擴展內存的其他 Debug 命令的信息,請單擊“相關主題”列表中 XA(分配擴展內存)、XM(映射擴展內存頁) 或 XS(顯示擴展內存狀態)。
++
范例
要釋放句柄 0003,請鍵入以下命令:
xd 0003
如果命令成功,Debug 將顯示下列消息:
Handle 0003 deallocated
++++
Debug:XM(映射擴展內存頁)
將屬于指定句柄的擴展內存邏輯頁映射到擴展內存的物理頁。
要使用擴展內存,必須安裝符合 4.0 版的 Lotus/Intel/Microsoft 擴展內存規范 (LIM EMS) 的擴展內存設備驅動程序。
xm [lpage] [ppage] [handle]
參數
lpage
指定要映射到物理頁 ppage 的擴展內存的邏輯頁面號。
ppage
指定將 lpage 映射到的物理頁面號。
handle
指定句柄。
有關使用擴展內存的其他 Debug 命令的信息,請單擊“相關主題”列表中的 XA(分配擴展內存)、XD(釋放擴展內存)或 XS(顯示擴展內存)。
++
范例
要將句柄 0003 的邏輯頁 5 映射到物理頁 2,請鍵入以下命令:
xm 5 2 0003
如果命令成功,Debug 將顯示下列消息:
Logical page 05 mapped to physical page 02
++++
Debug:XS(顯示擴展內存狀態)
顯示有關擴展內存狀態的信息。
要使用擴展內存,必須安裝符合 4.0 版的 Lotus/Intel/Microsoft 擴展內存規范 (LIM EMS) 的擴展內存設備驅動程序。
xs
參數
該命令不帶參數。
有關使用擴展內存的其他 Debug 命令的信息,請單擊“相關主題”列表中的 XA(分配擴展內存)、XD(釋放擴展內存)或 XM(映射擴展內存頁)。
++
范例
要顯示擴展內存信息,請鍵入以下命令:
xs
Debug 顯示與以下類似的信息:
Handle 0000 has 0000 pages allocated
Handle 0001 has 0002 pages allocated
Physical page 00 = Frame segment C000
Physical page 01 = Frame segment C400
Physical page 02 = Frame segment C800
Physical page 03 = Frame segment CC00
2 of a total 80 EMS pages have been allocated
2 of a total FF EMS handles have been allocated
++
說明
Debug 顯示的信息有如下格式:
Handle xx has xx pages allocated
Physical page xx = Frame segment xx
xx of a total xx EMS pages have been allocated
xx of a total xx EMS handles have been allocated