微机系统与接口微机系统与接口东南大学东南大学1目标代码动态调试目标代码动态调试——TurboDebuggerTurboDebuggerTD. EXE(简称(简称TD)是一个具有窗口界面的程序调)是一个具有窗口界面的程序调试器试器, 是是Borland 公司产品公司产品Turob Debugger 的的IA-16版本利用版本利用TD,用户能够调试已有的可执行程序,用户能够调试已有的可执行程序(后缀为(后缀为EXE);用户也可以在);用户也可以在TD中直接输入程中直接输入程序指令,编写简单的程序序指令,编写简单的程序一、一、如何启动如何启动TD二、二、TD中的数制中的数制三、三、TD的用户界面的用户界面四、代码区的操作四、代码区的操作五、寄存器区和标志区的操作五、寄存器区和标志区的操作六、数据区的操作六、数据区的操作七、堆栈区的操作七、堆栈区的操作处理器认识处理器认识环境检查修改环境检查修改指令认识指令认识直接直接I/OI/O操作操作( (硬件调试硬件调试) )单步调试单步调试断点调试断点调试优点优点: :彩色彩色文本文本, ,占用资源不多占用资源不多缺点缺点: :不支持中断调试不支持中断调试舞涨堂葡脊外孟莆蛙章英姻仓牛陵绳狠镀炼望镰寝咨率泵犬剪予樱疆延灿目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学2一、如何在一、如何在WindowsWindows环境下启动环境下启动TDTD在在WindowsWindows中启动中启动TDTDØ 仅启动仅启动TDTD而不载入要调试的程序而不载入要调试的程序 双双击击TD.EXETD.EXE文文件件名名,,WindowsWindows就就会会打打开开一一个个DOSDOS窗窗口口并并启启动动TDTD。
启启动动TDTD后后会会显显示示一一个个版版权权对对话话框框,,这这时按回车键即可关掉该对话框时按回车键即可关掉该对话框Ø 启动启动TDTD并同时载入要调试的程序并同时载入要调试的程序 把把要要调调试试的的可可执执行行文文件件拖拖到到TD.EXETD.EXE文文件件名名上上,,WindowsWindows就就会会打打开开一一个个DOSDOS窗窗口口并并启启动动TDTD,,然然后后TDTD会会把该可执行文件自动载入内存供用户调试把该可执行文件自动载入内存供用户调试 若若建建立立可可执执行行文文件件时时未未生生成成符符号号名名表表,,TD启启动动后后会会显显示示“Program has no symbol table”的的提提示示窗窗口口,,这时按回车键即可关掉该窗口这时按回车键即可关掉该窗口 (可修改属性可修改属性) ) 社令及毖狱枣链再穿拽段嗣吻娜淤歹偿狈败大姜嚎汁洁存辩讫井钵馋售杉目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学3一、如何在一、如何在命命令行方式启动令行方式启动TDTD什么是命什么是命令行方式令行方式? ?(1)Windows(1)Windows下进入命令行方式下进入命令行方式/ /常用常用MS-DOSMS-DOS命令命令 Windows下下 利利 用用 开开 始始 —运运 行行 (或或 按按 Win键键+R))—输输入入cmd 或或command (Win2K) ↙ ↙或或在在程程序序下下进进入入MS-DOS方方式式(Win2K)或或附附件件下下(Win XP)进进入入命命令令提提示符示符进入命令行方式。
也可将相关命令复制到桌面进入命令行方式也可将相关命令复制到桌面 可可以以根根据据爱爱好好和和需需要要修修改改MS-DOSMS-DOS方方式式或或命命令令提提示示符符的的相相关关属属性性,,包包括括起起始始((工工作作))目目录录((路路径径))、、快快捷捷键键((默默认认CTRL CTRL + + ALT ALT +D+D键键) )、、窗窗口口/ /全全屏屏选选项项、、前前景背景颜色等,景背景颜色等,遥逝丰峭肢艇姑枯诧辑泼僵鼠幅谴搞满鸣满蒙吨鲜菇遭巳秧夹臀酥叹妮予目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学4命令行命令行快捷方快捷方式选择式选择樱然犹冬襟座囚衙治喊厩岿羹辊贡招耍频塑械逛率喷屿屠舰垮客舌掺负颖目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学5颜色颜色属性属性选择选择命令行样例模式痔颊桔丝衰赞整劳乘鄂仰碟扫洽器包鸭莽晾陋盛嚼墟胚贺翔待渐矫展边舞目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学6典型命典型命令行操令行操作作采用滚屏采用滚屏方式方式(ScreenUp)柄修昧辫爪鬼旗掉坯吸捶荫帐艇来猖鹤获阵拂疲膝陀掠弗太躁伸雏踏赛娟目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学7一、如何启动一、如何启动TDTD在在命令行方式命令行方式- -DOSDOS窗口中启动窗口中启动TDTDØ 仅启动仅启动TDTD而不载入要调试的程序而不载入要调试的程序 D:\ASM D:\ASM>>TDTD↙ ↙ 用用这这种种方方法法启启动动TDTD,,TDTD会会显显示示一一个个版版权权对对话话框框,,这时按回车键即可关掉该对话框。
这时按回车键即可关掉该对话框Ø 启动启动TDTD并同时载入要调试的程序并同时载入要调试的程序 D:\ASM D:\ASM>>TD HELLO.EXETD HELLO.EXE↙ ↙ 若若建建立立可可执执行行文文件件时时未未生生成成符符号号名名表表(带带源源代代码码调调试试),,TDTD启启动动后后会会显显示示“Program Program has has no no symbol symbol tabletable”的的提提示示窗窗口口,,这这时时按按回回车车键键即即可可关关掉掉该该窗窗口案毗募诌惋扩马慈殖衣铭澄瘴吸矾钾省毕姿摈偿咖驹交鸭踩础互鼎玻琵弥目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学8二、二、TDTD中的数制中的数制 TDTD支支持持各各种种进进位位记记数数制制,,但但通通常常情情况况下下屏屏幕幕上上显显示示的的机机器器指指令令码码、、内内存存地地址址及及内内容容、、寄寄存存器器的的内内容容等等均均按按十十六六进进制制显显示示((数数值值后后省省略略“H H”))。
在在TDTD的的很很多多操操作作中中,,需需要要用用户户输输入入一一些些数数据据、、地地址址等等,,在在输入时应遵循计算机中数的记数制标识规范例如:输入时应遵循计算机中数的记数制标识规范例如: 二进制数后面加二进制数后面加“B B”或或“b b”,如,如10010001b10010001b等;等; 十十六六进进制制数数后后面面加加“H H”或或“h h”,,如如38h38h、、0a5h0a5h、、0ffh0ffh等 TDTD允允许许在在常常数数前前面面加加上上正正负负号号,遵遵循循补补码码格格式式 所所有有的的实实验验在在输输入入程程序序或或数数据据时时,,若若无无特特别别说说明明,,都都可可按按十十六六进进制制数数进进行行输输入入,,若若程程序序中中需需要要输输入入负负数,可按上述规则进行输入数,可按上述规则进行输入棚捞污料而核疲蹬滴掉臭逻烃进馈揩祈叛大牡抑翰惋铆者鹰奄棉捐完幌嘲目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学9三、三、TDTD的用户界面的用户界面——CPUCPU窗窗口口 代码区代码区数据区数据区寄存器区寄存器区 堆栈区堆栈区 标志区标志区功能键提示条功能键提示条全局菜单全局菜单图图3.1 TD3.1 TD的的CPUCPU窗口界面窗口界面虐隅泌汗昨毖杉阵拇版戳蝴襟睹靛彰茅芍真删磊缠泣哀旭花美背曾磊迈蹈目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学10三、三、TDTD的用户界面的用户界面——CPUCPU窗窗口口 功能作用:功能作用:----代码动态调试代码动态调试Ø显示显示CPUCPU和内存整个状态;和内存整个状态;Ø在在代代码码区区内内使使用用嵌嵌入入汇汇编编,,输输入入指指令令或或对对程程序序进进行行临时性修改。
临时性修改Ø存存取取数数据据区区中中任任何何数数据据结结构构下下的的字字节节,,并并以以多多种种格格式显示或改变它们式显示或改变它们Ø 检查和改变寄存器(包括标志寄存器)的内容检查和改变寄存器(包括标志寄存器)的内容 五个区域:代码、寄存器、标志、数据和堆栈区五个区域:代码、寄存器、标志、数据和堆栈区 光光标标所所在在区区域域称称为为当当前前区区域域,,用用户户可可以以使使用用TabTab键键或或Shift-TabShift-Tab键键切切换换当当前前区区域域,,也也可可以以在在相相应应区区中中单击鼠标左键选中某区为当前区单击鼠标左键选中某区为当前区综霸擅砧柒叫豢柯舀藕吗盈彼盛剑研妙睁滞撂匝碾籽灾脓文抉袭向某索猎目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学11感兴趣的存储区域选择感兴趣的存储区域选择 点点击击感感兴兴趣趣的的区区域域((代代码码、、数数据据和和堆堆栈栈区区之之一一)),,出出现现GOTO…下下拉拉菜菜单单((选选择择Goto../G)写写入入新新的的段段基基和和偏偏移移量量地地址(如址(如3400:5000,或或ES::5000)回车输入)回车输入 扬八客琅施进建断弄霉禾盾办旦侄巍雏寨盘乏拭凸尿秀獭守涟荒四磷揪廊目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学12三、三、TDTD的用户界面的用户界面——全局菜单介绍全局菜单介绍1 1CPU窗窗口口的的上上面面为为TD的的全全局局菜菜单单条条,,可可用用“ALT键键+菜菜单单项项首首字字符符”打打开开菜菜单单项项对对应应的的下下拉拉子子菜菜单单。
在在子子菜菜单单中中用用“↑↑”、、“↓↓”键键选选择择所所需需的的功功能能,,按按回回车车键键即即可可执执行行选选择择的的功功能能为为简简化化操操作作,,某某些些常常用用的子菜单项后标出了对应的快捷键的子菜单项后标出了对应的快捷键 FileFile菜单:文件操作菜单:文件操作Open Open 载入可执行程序文件准备调试载入可执行程序文件准备调试Change dir Change dir 改变当前目录改变当前目录Get info Get info 显示被调试程序的信息显示被调试程序的信息DOS shell DOS shell 执行执行DOSDOS命令解释器(用命令解释器(用EXITEXIT命令退回到命令退回到TDTD))Quit Quit 退出退出TDTD((Alt-XAlt-X)) 剂涯怠支匀酋汪弹叭葵票器酥庐辟搪站瞻叭柒辟耍颇呻购区蕴爷削酥蓬本目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学13三、三、TDTD的用户界面的用户界面——全局菜单介绍全局菜单介绍2 2EditEdit菜单:文本编辑CopyCopy 复制当前光标所在内存单元的内容到粘贴板(复制当前光标所在内存单元的内容到粘贴板(Shift-F3Shift-F3))PastePaste把粘贴板内容粘贴到当前光标所在内存单元(把粘贴板内容粘贴到当前光标所在内存单元(Shift-F4Shift-F4))ViewView菜单:打开一个信息查看窗口菜单:打开一个信息查看窗口Breakpoints Breakpoints 断点信息断点信息Stack Stack 堆栈段内容堆栈段内容Watches Watches 被监视对象信息被监视对象信息Variables Variables 变量信息变量信息Module Module 模块信息模块信息File File 文件内容文件内容CPU CPU 打开一个新的打开一个新的CPUCPU窗口窗口Dump Dump 数据段内容数据段内容Registers Registers 寄存器内容寄存器内容谈丈拯底意喳迷窘脏隅瓣廖岭开汀兜泼伎恋一怠扯捧识婆蜀曰击刑桩扦佯目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学14三、三、TDTD的用户界面的用户界面——全局菜单介绍全局菜单介绍3 3RunRun菜单:执行菜单:执行Run Run 从从CS:IPCS:IP开始运行程序直到程序结束开始运行程序直到程序结束(F9)(F9)Go to cursor Go to cursor 从从CS:IPCS:IP开始运行程序到光标处开始运行程序到光标处(F4)(F4)Trace Trace into into 单单步步跟跟踪踪执执行行((对对CALLCALL指指令令将将跟跟踪踪进进入入子子程程序序))(F7)(F7)Step Step over over 单单步步跟跟踪踪执执行行( (对对CALLCALL指指令令将将执执行行完完子子程程序序才才停停下下)(F8))(F8)Execute to Execute to 执行到指定位置执行到指定位置(Alt-F9)(Alt-F9)Until return Until return 执执行当前子程序直到退出行当前子程序直到退出(Alt-F8)(Alt-F8) ))BreakpointsBreakpoints菜单:断点功能菜单:断点功能Toggle Toggle 在当前光标处设置在当前光标处设置/ /清除断点清除断点(F2)(F2)At At 在指定地址处设置断点(在指定地址处设置断点(Alt-F2Alt-F2))Delete all Delete all 清除所有断点清除所有断点赔楷梗意雄娶檀赵弹帕揪换才狞光霜抖损靡霸您苯驶纲娜笆男玫揩诧孽卢目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学15三、三、TDTD的用户界面的用户界面——全局菜单介绍全局菜单介绍4 4DataData菜单:数据查看菜单:数据查看Inspector Inspector 打开观察器以查看指定的变量或表达式打开观察器以查看指定的变量或表达式Evaluate/ModifyEvaluate/Modify 计算和显示表达式的值计算和显示表达式的值Add watch Add watch 增加一个新的表达式到观察器窗口增加一个新的表达式到观察器窗口OptionOption菜单:杂项菜单:杂项Display optionsDisplay options 设置屏幕显示的外观设置屏幕显示的外观Path for sourcePath for source 指定源文件查找目录指定源文件查找目录Save options Save options 保存当前选项保存当前选项招彝莫操谍衅箕入扶骂斯寝臀聊卤臂啮堪伶橙救灰霜掌暮授淋吝猿停蛇迭目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学16三、三、TDTD的用户界面的用户界面——全局菜单介绍全局菜单介绍5 5WindowWindow菜单:窗口操作菜单:窗口操作Zoom Zoom 放大放大/ /还原当前窗口(还原当前窗口(F5F5))Next Next 转到下一窗口(转到下一窗口(F6F6))Next Pane Next Pane 转到当前窗口的下一区域(转到当前窗口的下一区域(TabTab))Size/Move Size/Move 改变窗口大小改变窗口大小/ /移动窗口(移动窗口(Ctrl-F5Ctrl-F5))Close Close 关闭当前窗口(关闭当前窗口(Alt-F3Alt-F3))User screen User screen 查查看用看用户户程序的程序的显显示(示(Alt-F5Alt-F5)) 粘用人臼肖凉支棕钮哟娜夫裸憾爪吴豢俏钢夕缘掀繁甜脯觅削乱阿增翻羚目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学17三、三、TDTD的用户界面的用户界面——功能键提示条功能键提示条三三组组功功能能键键::F1~~F10,,Alt-F1~~Alt-F10,Ctrl功功能能键键----代代码码区区的的局局部部菜菜单单。
CPU窗窗口口下下面面的的提提示示条条中中显显示示了了这这三三组组功功能能键键对对应应的的功功能能通通常常情情况况下下提提示示条条中中显显示示的的是是F1~~F10功功能能键键的的功功能能按按住住Alt不不放放,,提提示示条条中中将将显显示示Alt-F1~~Alt-Alt-F10功功能能键键的的功功能能按按住住Ctrl不不放,提示条中将显示各放,提示条中将显示各Ctrl功能键的功能功能键的功能 虹踪孟傈侯患呻思扒膀瓢悦姚貌黍谊膝词阀惧萄禁莎哟节噪粗帆掩稳岸计目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学18 TDTD功能键对应功能表功能键对应功能表 盅淖矢厨奔鼎样豌逗谣支食尧茸基涛辐撰删浓狞皖阔霍应烘竟刘芽剔裳瑟目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学19CPUCPU窗口窗口----局部菜单局部菜单 TDTD的的CPUCPU窗窗口口中中,,每每个个区区域域都都有有一一个个局局部部菜菜单单,,局局部部菜菜单单提提供供了了对对本本区区域域进进行行操操作作的的各各个个命命令令。
在在当当前前区区域域中中按按Alt-F10Alt-F10键键或或单单击击鼠鼠标标右右键键即即可可激激活活本本区区域的域的局部菜单局部菜单, ,进行修改等各种操作进行修改等各种操作代码区的局部菜单代码区的局部菜单 轻阴遮柴完琵金翔豌朔他殆锚豢囚痢杰瑰鼓栈啄白吞掐批赠衅磊气鲤界吼目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学20CPUCPU窗窗口口----代码区的操作代码区的操作 代代码码区区用用来来显显示示代代码码((程程序序))的的地地址址、、代代码码的的机机器器指指令令和和代代码码的的反反汇汇编编指指令令本本区区中中显显示示的的反反汇汇编编指指令令依依赖赖于于所所指指定定的的程程序序起起始始地地址址TDTD自自动动反反汇汇编编代代码码区区的的机机器器代代码码并并显显示对应的汇编指令示对应的汇编指令 每每条条反反汇汇编编指指令令的的最最左左端端是是其其地地址址,,如如果果段段地地址址与与CSCS段段寄寄存存器器的的内内容容相相同同,,则则只只显显示示字字母母“CSCS”和和偏偏移移量量((CS:YYYYCS:YYYY)),,否否则则显显示示完完整整的的十十六六进进制制的的段段地地址址和和偏偏移移地地址址((XXXX:YYYYXXXX:YYYY))。
地地址址与与反反汇汇编编指指令令之之间间显显示示的的是是指指令令的的机机器器码码如如果果代代码码区区当当前前光光标标所所在在指指令令引引用用了了一一个个内内存存单单元元地地址址,, 则则该该内内存存单单元元地地址址和和内内存存单单元元的的当当前前内内容容显显示示在在CPUCPU窗窗口口顶顶部部边边框框的的右右部部,,这这样样不不仅仅可可以以看看到到指指令令操操作作码码,,还可看到指令要访问的内存单元的内容还可看到指令要访问的内存单元的内容当带源代码调试时可以看到指令符号当带源代码调试时可以看到指令符号疽赦颧穆稳杭钟福呕陷滋幅杠犊知斩当钩畜刻猎镀惮胜棠讥众荫姐曼圆窟目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学21CPUCPU窗窗口口----代码区的操作代码区的操作 在光标行按空格键弹出输入框在光标行按空格键弹出输入框,汇编修改当前指令汇编修改当前指令.数据区相同数据区相同垄店饥高永飞茧烯脂蓉絮阂寄耀郎殴堆袁罪外份钝朗旁阅诅请抑哇馒订禾目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学22CPUCPU窗窗口口——数数据区的操作据区的操作 在光标处按空格键弹出输入框在光标处按空格键弹出输入框,修改内存数据修改内存数据(可连续输入可连续输入,用空格隔开用空格隔开)嚣红疫穿况腊洼打呀罚羚嗣事柯漓农库淹锋烁忽肋锯血馁瞅臃堡呼堆昏俗目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学23CPUCPU窗窗口口——寄存器寄存器区的操作区的操作1 1 在光标处按空格键弹出输入框在光标处按空格键弹出输入框,修改内存数据修改内存数据(可连续输入可连续输入,用空格隔开用空格隔开),堆栈区相同堆栈区相同坷膝休拴腮我舰柞幕翼踢樊熟富潜中鬼护噪获浴葫卵烁哟住则愉弟俊燎氖目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学24CPUCPU窗窗口口——寄存器寄存器区的操作区的操作2 2 在光标处在光标处单击鼠标右键单击鼠标右键弹出局部菜单弹出局部菜单,选择控制功能选择控制功能,增减增减1或置零等或置零等赘灰旺卞座糟栏石贷磕符锹罩曰阑老庙执腐涅豆蚌直减侄油杯孩戍钳茬姐目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学25CPUCPU窗窗口口——代码区代码区I/OI/O操作操作: :输入例输入例 在光标处在光标处单击鼠标右键单击鼠标右键弹出局部菜单弹出局部菜单,选择选择I/O --In Byte乔纲惶整潦各这胯骸急窥侣弃藕泼由战街帚认圾弊樟颤骑鹰怜价振笨者卡目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学26CPUCPU窗窗口口——代码区代码区I/OI/O操作操作: :输入例输入例在光标处在光标处输入端口号或端口符号输入端口号或端口符号崎宗卷现款铀蒸来诱体灭瓣走色驶栖批悲旧孺本寿后衰令撩诌倾纬兽丰荧目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学27CPUCPU窗窗口口——代码区代码区I/OI/O操作操作: :输入例输入例端口号十进制和十六进制端口号十进制和十六进制 输入数值十进制和十六进制数输入数值十进制和十六进制数 狗渣夜阉蛀瘫菲墨柏曙汛梭究堪晰屏涝荆咒繁坐例秩哪嗽少唉氦皮扔余塔目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学28CPUCPU窗窗口口——代码区代码区I/OI/O操作操作: :输出例输出例端口号十进制和端口号十进制和 输出数值十六进制数输出数值十六进制数,中间用逗号隔开中间用逗号隔开 缆无蔽导肯荫镶赠孝玫见悸豢馒崔唤蝗琴蜀匠缆秆盖柜催舔肺怂逼句暗锋目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学29 CPUCPU窗窗口口——标志区修改操作标志区修改操作光标处按空格键修改光标处按空格键修改,或单击鼠标右键趟出菜单选择修改或单击鼠标右键趟出菜单选择修改 刚颇稻畸思喧戊凋弛惺丈错铜坪泌恫诽嫁因挽胯孵叔硕盒汕梨虚伶绳廷忙目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学30指令输入与功能认识指令输入与功能认识 1.CPU1.CPU窗窗口口- -代码区操作代码区操作: :在光标行按空格键弹出输入框在光标行按空格键弹出输入框,汇编或修改当前指令汇编或修改当前指令例例MOV AX,,90A0,修改,修改CS,,IP=010F,观察,观察AX内容,利用内容,利用RUN下单步命令下单步命令F7/F8,执行一条指令,结果:,执行一条指令,结果:IP=0112,,AX=90A0—尝试各种寻址方式,尤其是存储器寻址尝试各种寻址方式,尤其是存储器寻址光标处按空格键修改光标处按空格键修改,或单击鼠标右键趟出菜单选择修改或单击鼠标右键趟出菜单选择修改 机器码机器码B8A090篡霞孟按印膊旱怠亮包骤鲜试斧告裁滑违峙丸蒙徘僳亩禽破靶陈牙声货篆目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学31 指令输入与功能认识指令输入与功能认识(默认十六进制数)(默认十六进制数)典型指令:典型指令:MOV [2000],,AX ;如何确定;如何确定DS::[2000]内容?内容?MOV CS::[2000],,BXINC BYTE PTR [2000] (观察存储器字节单元变化)(观察存储器字节单元变化)DEC WORD PTR[BX] (观察存储器字单元变化,存储(观察存储器字单元变化,存储3000H))LDS SI,,[2000] 察存储器双字单元内容察存储器双字单元内容=DS::SI?)?)PUSH AX ,,PUSH BX,,POP AX,,POP BX (观察堆栈指针和内容变化)(观察堆栈指针和内容变化)ADD [2000],,AXAND AL,,BX,, SHL AX,,1((CL))CLC,, STDREP MOVSB, MOVSW (先修改先修改DS,SI;ES,DI,DF)信息交换与运算指令信息交换与运算指令这原俩饱裙糜鼓韦饼呢愤鹃鼻岗坞觅疗慢膛舷切湘霸堤秦越酒止江矗由豁目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学32 指令输入与功能认识指令输入与功能认识(默认十六进制数)(默认十六进制数)顺序执行:设置断点:在蓝色光标行处按顺序执行:设置断点:在蓝色光标行处按F2键指定或取消断键指定或取消断点(或B点(或Breakpoints菜单下选菜单下选Toggle),一段程序: 程序流控制,顺序执行,断点结果检查一段程序: 程序流控制,顺序执行,断点结果检查象筹躁杰罚总盂挝荤悲冶攻链首昏劝更之陆旗夯戳兰裤扣苇凯遮丧棱寸缴目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学33 指令输入与功能认识指令输入与功能认识(默认十六进制数)(默认十六进制数)条件转移:条件转移:CS:1FC0 CMP AX,1000 JC 2000 JZ 2010循环转移:循环转移: LOOP 1FA0无条件转移:无条件转移: JMP 1FA8 (SHORT) JMP 4020:809A JMP NEAR PTR[2000] JMP FAR PTR[2000]程序流控制1:执行过程程序流控制1:执行过程检查条检查条件,目件,目标标CS:IP寻址方寻址方式,检式,检查目标查目标CS:IP里迈寿褒贩幼搀僧喧愤拔唯绷们域诵锗罩盐标情织姑崎拦野漆流裁泳蹿尘目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学34 指令输入与功能认识指令输入与功能认识(默认十六进制数)(默认十六进制数)过程调用:过程调用: CALL 2000HCALL BXCALL 2000:4321H CALL NEAR/FAR PTR[BX]过程返回: :过程返回: : RET RETF中断调用: 中断调用: INT 08H中断向量:中断向量:0000:0020H 中断返回: 中断返回: …IRET程序流控制程序流控制2::小段小段过程程序/中断服务程序过程程序/中断服务程序检查堆栈检查堆栈返回断点返回断点目标目标CS:IP检查堆栈检查堆栈返回断点返回断点检查堆栈检查堆栈返回断点返回断点中断向量目中断向量目标标CS:IP检查堆栈检查堆栈返回断点返回断点婆赡乍焕匀捕袍堰襄拜孜崭耿耐儒数溯邱贪牙钟寒瘸克牡呐仁鸡疗调祁筒目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学35 指令输入与功能认识指令输入与功能认识(默认十六进制数)(默认十六进制数)调试认识其他指令功能调试认识其他指令功能;带符号调试功能带符号调试功能:支持符号调试宏汇编操作支持符号调试宏汇编操作: MASM/Zi myprog; MASM/Zi myprog; Link/codeview myprog; Link/codeview myprog;TASM/zi myprog; TASM/zi myprog; 兼容兼容MASM/ZiMASM/Zi TLINK/v myprog+…; 可以直接操作可以直接操作\检查检查符号符号变变量、量、标标号!号!桐朋炳哲余颂轨丧圈张富靖揭揽宾苇楔恳恃烙呼鸣勿熊惟谎永痔碳判芹驱目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学36 指令输入与功能认识指令输入与功能认识(默认十六进制数)(默认十六进制数)带符号调试功能带符号调试功能: (打开(打开CPU窗口可同时看到源程序)窗口可同时看到源程序)支持符号调试宏汇编操作支持符号调试宏汇编操作: 栽时垃开扇纯仙梦剃迄裙禾带忻主州恍钡奋管坛姨篙驶笑想厕据怀餐迹典目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学3737汇编过程及原理汇编过程及原理运行汇编程序必备的软件环境:运行汇编程序必备的软件环境:DOSDOS操作系统;汇编软件操作系统;汇编软件系统。
汇编系统盘应包含如下文件:系统汇编系统盘应包含如下文件:MASM MASM 宏汇编程序文件宏汇编程序文件 (TASM) (TASM)LINK LINK 连接程序文件连接程序文件 (TLINK) (TLINK)CREF CREF 索引程序文件(也可不用)索引程序文件(也可不用)EDIT EDIT 文本编辑程序(或文本编辑程序(或PEPE等文本编辑程序)等文本编辑程序)用户通过屏幕编辑程序用户通过屏幕编辑程序EDITEDIT(各功能)键入源程序,检(各功能)键入源程序,检查无误,可将源程序存到汇编系统盘上,查无误,可将源程序存到汇编系统盘上,该程序的扩该程序的扩展名为展名为·ASMASMXXX.ASMXXX.ASM))(2) MASM(2) MASM汇编程序:格式、宏、模块汇编程序:格式、宏、模块OBJ: OBJ: 浮动汇编浮动汇编(相对关系)、段、变量待定位(相对关系)、段、变量待定位 峦被抗花砒谷快禾貉碰蛋擒蹬政畦坚帛版饶诱吴宫砾何召鸽露墙悠耽浇碾目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学3838汇编链接过程汇编链接过程执执行行宏宏汇汇编编程程序序MASM----MASM----生生成成目目标标文文件件.OBJ.OBJ,,辅辅助助文文件件LSTLST,,CRFCRF(可选)(可选)用汇编语言编写的源程序必须是一个完整的源程序,才能经用汇编语言编写的源程序必须是一个完整的源程序,才能经过宏汇编程序过宏汇编程序MASMMASM的汇编,生成一个目标程序。
为了完成汇的汇编,生成一个目标程序为了完成汇编任务,汇编程序一般采用两遍扫描的方法,第一遍扫描源编任务,汇编程序一般采用两遍扫描的方法,第一遍扫描源程序产生符号表、处理伪指令等,第二遍扫描产生机器指令程序产生符号表、处理伪指令等,第二遍扫描产生机器指令代码、确定数据等代码、确定数据等 OBJOBJ将将源源程程序序的的操操作作码码部部分分变变为为机机器器码码,,但但地地址址操操作作数数是是可可浮浮动动的的相相对对地地址址,,而而不不是是实实际际地地址址,,因因此此需需经经LINKLINK连连接接文文件件进进行连接才能形成可执行文件行连接才能形成可执行文件LSTLST是列表文件把源程序和目标程序列表,以供检查程序用是列表文件把源程序和目标程序列表,以供检查程序用CRFCRF是是交交叉叉索索引引文文件件,,对对源源程程序序所所用用的的各各种种符符号号进进行行前前后后对对照照的文件的文件仍径涎阳绳凳酝赋词阐埔割柒训贵雇诽尿扦巳尉锻钞壳幅芋褂供接湿售社目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学3939汇编链接操作过程汇编链接操作过程C:\masm\masm ↙↙ [MYFILE[.asm][,,mobj,,mlst,mcrf];;Microsoft ((R)) Macro Assemble Version 5.00Copyright ((C)) Microsoft Corp 1981-1985,1987,All right reserved.Source filename [.ASM ]:MYFILE ↙↙ Object filename [MYFILE.OBJ ]:MYFILE ↙↙Source listing [NUL.LST ]:MYFILE ↙↙Cross-reference [NUL.CRF]:MYFILE ↙↙ 50678++410090 Bytes symbol space free 0 Warning Errors 0 Severe ErrorsMASM/R MASM/E----8087MASM/R MASM/E----8087实模式/仿真库方式实模式/仿真库方式芜核至权诬父炬蜕际苯卓馆谷钮控萎是躺峪溜巾蹿烬藤械隙橇稳邻乖兄税目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学4040LINK LINK 多模块链接多模块链接用用汇汇编编语语言言编编写写的的源源程程序序经经过过汇汇编编程程序序((MASMMASM))汇汇编编后后产产生生了了目目标标程程序序((.OBJ.OBJ)),,该该文文件件是是将将源源程程序序操操作作码码部部分分变变成成了了机机器器码码,,但但地地址址是是可可浮浮动动的的相相对对地地址址((逻逻辑辑地地址址)),,因因此此必必须须经经过过连连接接程程序序LINKLINK连连接接后后才才能能运运行行。
连连接接程程序序LINKLINK是是把把一一个个或或多多个个独独立立的的目目标标程程序序模模块块装装配配成成一一个个可可重重定定位位的的可可执执行行文文件件,,扩扩展展名名为为.EXE.EXE文文件件此此外外还还可可以以产产生生一一个个内内存存映映象象文件,扩展名为文件,扩展名为.MAP.MAP连接程序执行过程连接程序执行过程: : D>LINK ↙↙(直接链接(直接链接 P1+P2+P3[, PEXE,PMAP,LIB1+LIB2]/M/M;))Microsoft® overlay link Version 3.60Copyright ©Microsoft Corp 1983-1987 All right reservedObject Modules [.OBJ]::MYFILE ↙↙ Run File [MYFILE.EXE]::MYFILE ↙↙List File [NUL.MAP]::MYFILE ↙↙[;]Libraries [.LIB]:: ↙↙((LINK/HELP---帮助开关)帮助开关)缨曲苯婆壮职港挤锁贡醒凭苫坠缩拌蝶毯块葡逝姑抠割箭洋夹久暮兼己霜目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学4141内存映象文件(内存映象文件(.MAP.MAP))由由连连接接程程序序LINKLINK产产生生的的扩扩展展名名为为.MAP.MAP文文件件,,它它实实际际上上是是连连接接程程序序的的列列表表文文件件,,它它给给出出了了每每个个段段的的地地址址分分配配情情况况及及长长度度, ,(加(加/M/M开关开关――――外部变量相对地址。
例如:外部变量相对地址例如:D>TYPE MYFILE.MAP↙↙Start Stop Length Name Class00000H 0000FH 0010H DATA00010H 0004FH 0040H STACK00050H 0005FH 0010H CODEOrigin Group[Address Publics by name0900:0002 mmm0010:0070 VV1 Address Publics by value0010:0070 VV10900:0002 mmm ]Program entry point at 0005:0000反惫婴养剧娜怀栅嘲咒杯鳞嚷苇嘛放坍栋迄展调耪佐尘胶十键拨吻视讳靡目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学4242交叉索引文件(交叉索引文件(.CRF.CRF))汇汇编编后后产产生生的的交交叉叉索索引引文文件件,,扩扩展展名名为为.CRF,.CRF,它它列列出出了了源源程程序序中中定定义义的的符符号号((包包括括::标标号号、、变变量量等等))和和程程序序中中引引用用这这些些符符号的情况。
号的情况如如果果要要查查看看这这个个符符号号表表,,必必须须使使用用CREF.EXECREF.EXE的的文文件件,,它它根根据据.CRF.CRF文文件件建建立立一一个个扩扩展展名名为为.REF.REF的的文文件件,,而而后后再再用用DOSDOS的的TYPETYPE命命令令显显示示,,就就可可以以看看到到这这个个符符号号使使用用情情况况表表具具体体操操作作方法如下:方法如下:D>CREF↙↙cref filename [.CRF]::MYFILE↙↙ list filename [MYFILE.REF]::↙↙D>TYPE MYFILE.REF↙↙ 片坍伴庐逛乾若冗核媳叮冲倡刊慌灼痢罪根徽醒载盔留晓猴约驹饼馋揪荫目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学4343执行、执行、目标代码格式比较与调试目标代码格式比较与调试.EXE.EXE装装入入后后各各寄寄存存器器((段段的的分分配配))、、已已定定义义变变量量((数数据)地址,N/F指针变量;据)地址,N/F指针变量;. .各伪指令的作用;各伪指令的作用;. .多模块(多模块(PUBLIC/EXTRNPUBLIC/EXTRN)链接;/)链接;/M,8087M,8087指令实验。
指令实验 .汇编指令与目标代码指令的差别汇编指令与目标代码指令的差别 .重要重要DOS/BIOSDOS/BIOS功能调用(控制台输入/输出)功能调用(控制台输入/输出). .不不要要试试图图跟跟踪踪 DOS/BIOSDOS/BIOS调调用用,,尽尽量量用用断断点点或或过过程程P P命令命令. .注意:高级语言与汇编语言接口注意:高级语言与汇编语言接口童粟渔量斗哭迪蒋恃净诞漠墒逊幽肺搔腋桂驻砒枢遭烙术柜肿特捎炙哟陵目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学4444 调试工具调试工具(1)DEBUG----(1)DEBUG----命令行目标代码调试器命令行目标代码调试器(2)CV(2)CV—CodeView MicrosoftCodeView Microsoft公司源代码调试器公司源代码调试器 MASM/Zi myprog; MASM/Zi myprog; Link/codeview myprog; Link/codeview myprog;(3)TD(3)TD—Turbo Debuger BorlandTurbo Debuger Borland公司源代码调试器公司源代码调试器 TASM/zi myprog; TASM/zi myprog; 兼容兼容MASM/ZiMASM/Zi TLINK/v myprog+…; (4) Compuware Co. Compuware Co.的的NUMEGANUMEGA Soft-ICE Soft-ICE EXE EXE,,DLLDLL,,OCXOCX,,VxDVxD蝉哀嫂灶趴统嘛国熬渠悼脓焦茹佑道敏龋肆诱灼杰岩挫肌磷墒慑均湍么政目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger微机系统与接口微机系统与接口东南大学东南大学4545实际操作实际操作MASM T18;MASM T19;LINK T18+T19;TASM/zi T18;TLINK/v T18;TD T18(.exe)F3重复命令行重复命令行肚套复亨粒般遵轨奠荔粗胎辊淑刃酬昧律杏仟顽顿砾吞贴灌夕于剔骄叛橱目标代码动态调试TurboDebugger目标代码动态调试TurboDebugger。