資源描述:
《在debug環(huán)境下建立和匯編程序》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、在debug環(huán)境下建立和匯編程序一,(1)進(jìn)入debugC:debug回車(2)輸入程序并匯編-A100回車0AF0:0100movdl,38回車0AF0:0102movah,2回車0AF0:0104int21h回車0AF0:0106int20h回車0AF0:0108回車(3)運(yùn)行程序-g=1008Programterminatednormally如果想分析該程序的指令,可使用反匯編命令U(4)反匯編-u100,108回車0AF0:0100B238MOVDL,30AF0:0102B402MOVAH,00AF0:0104CD21INT210AF
2、0:0106CD20INT200AF0:010856PUSHSI(5)將機(jī)器指令程序送到起始地址為200h的單元-e200b2,38,b4,02,cd,21,cd,20,56-g=2008Programterminatednormally?二,常用debug命令介紹(1)顯示,修改寄存器內(nèi)容顯示所冇寄存器內(nèi)容格式:-r回車功能:以十六進(jìn)制形式顯示cpu內(nèi)部個(gè)寄存器的值;以符號形式顯示標(biāo)志寄存器的各標(biāo)志位(除tf外)的值;并將CS:IP所指的內(nèi)存內(nèi)容反匯編成一?條指令,可視為將要執(zhí)行的指令。如:-r回車AX=0000BX=OOOOCX=OOOOD
3、X=OOOOSP=FFEEBP=OOOOSI=0000DI=0000DS=OAFOES=OAFOSS=OAFOCS=OAFOIP=0200NVUPElPLNZNAPONC0AF0:0200B238MOVDL,38矢□:cs=OAFOh,IP=0100h修改寄存器榕式:一r寄存器名回車-rdsDSOAF:OAEO-rds的內(nèi)容由原來的OafOh修改為OaeOh修改標(biāo)志值格式:-rf例:-rfNVUPElPLNZNAPONC-ovng回車將of,sf的值分別修改為1。⑵匯編,反匯編指令匯編命令A(yù)格式:一A內(nèi)存地址回車?yán)赫{(diào)用dos中02h號功能顯示
4、字符'訂,將該程序匯編到1270:100h開始的內(nèi)存中。-A1270:1001270:0100mov,ah,21270:0102mov,dl,611270:0104int211270:0106int201270:0108-反匯編命令U格式:一u內(nèi)存塊回年功能:分三列顯示反匯編的結(jié)果,第一列為指令首地址,第二列為16進(jìn)制形式的指令機(jī)器碼,第三列為指令的助記符。-u1270:1001270:0100B402MOVAH,021270:0102B261MOVDL,611270:0104CD21INT211270:0106CD20INT201270:01
5、080000ADD[BX+SI],AL1270:010A0000ADD[BX+SI],AL1270:010C0000ADD[BX+SI],AL1270:010E0000ADD[BX+SI],AL1270:01100000ADD[BX+SI],AL1270:01120000ADD[BX+SI],AL1270:01140000ADD[BX+SI],AL1270:01160000ADD[BX+SI],AL1270:01180000ADD[BX+SI],AL1270:011A0000ADD[BX+SI],AL1270:011C0000ADD[BX+SI
6、],AL1270:011E0000ADD[BX+SI],AL?(3)執(zhí)行程序1?單步執(zhí)行格式:一t=內(nèi)存地址冋車格式:一p=內(nèi)存地址回車功能:用命令中的內(nèi)存地址的段地址和偏移地址修改CS和ip,然后執(zhí)行由cs:ip指向的內(nèi)存單元處的一條指令,顯示各寄存器的值,并反匯編下一條指令,返回debug狀態(tài)。例:-t=1270:100AX=0200BX=OOOOCX=0000DX=0000SP=FFEEBP=OOOOSI=0000DI=0000DS=OAEOES=OAFOSS=OAFOCS=1270IP=0102OVUPElNGNZNAPONC1270:
7、0102B261MOVDL,61-執(zhí)行結(jié)果:ah=2,cs值不變,ip的值增加2,cs:ip指向第二條指令2.多步執(zhí)行格式:一t=內(nèi)存地址執(zhí)行指令的條數(shù)格式:一p=內(nèi)存地址執(zhí)行指令的條數(shù)命令t和p的不同:one:帶重復(fù)前綴rep/repnz/repz的串操作指令和loop/loopz/loopn等循環(huán)指令是與cs和關(guān)的指令。用t命令執(zhí)行這類指令時(shí),每執(zhí)行一次,ex值減一,就停卜.來返回debug;而p命令執(zhí)行時(shí),一肓執(zhí)行到cx=0,執(zhí)行其后的下一條指令,才返冋debugtwo:調(diào)用指令call及中斷調(diào)用指令int,由于這類指令修改了cs和ip,
8、使程序結(jié)構(gòu)產(chǎn)生轉(zhuǎn)向。用t命令則在cs:ip(子程序)入口處停下來返回debug,nJ"用t命令進(jìn)行跟蹤。而用P命令則顯示call和int的下一條指令如