browser
驱动牛犊
驱动牛犊
  • 注册日期2004-08-21
  • 最后登录2005-02-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1328回复:8

调试高手

楼主#
更多 发布于:2004-10-13 19:10
欢迎使用解释型跟踪调试软件----TR

  如果你用过DEBUG,SYMDEB,TD(TURBO DEBUG),CV(CODE VIEW )或 SOFT-ICE, 你应该试试TR。
  TR(将)具有以上调试软件的一切功能,支持它们的所有命令。而且,最重要的是,TR提出了九大新的思想:
  一、解释跟踪
  TR对程序是解释执行的。TR就象是一个CPU, 能读懂每一句程序代码并正确解释执行,不需要使用INT1,INT3,不需要使用386调试寄存器DR0-DR7,不需要进入保护模式(是不会)。理论上,TR永远不会被应用程序发现,永远不会有跟踪不下去的程序。因为所有的程序都要交给CPU去解释执行,只要CPU认识的指令,TR也要认识,TR会想象CPU 处在这种状态会怎么作,那我也那么去作。如果你发现TR作错了,那是TR还尚待完善。
  传统的跟踪方式有太多的弊病:
  (1)那些使用单步中断INT1的调试软件,因为它们独占INT1和TF,所以那些需要INT1的应用程序便无法跟踪,应用程序也可以通过检测TF来发现自己是否正在被跟踪。
  (2)那些使用断点中断INT3的调试软件, 需要在应用程序中插入代码INT3(0CCH),如果应用程序破坏INT3的中断向量,或检测自身代码便无法跟踪。
  (3)SOFT-ICE不使用以上两种方法,而是用386硬件中断, 效果要好多了。跟踪那些对386一无所知的程序不成问题。但许多要求EMM386、DPMI、DOS4GW 等的软件的运行受到了极大的限制,甚至根本不能在SOFT-ICE 下执行。 更重要的是,SOFT-ICE很容易被发现。
  总之,现有跟踪调试软件都是利用INTEL的CPU手册上提供的规范的调试方法进行工作,它们只适合调试那些规规矩矩的、愿意被跟踪调试的程序。如果应用程序不予合作,便不能跟踪。TR则不同,TR要跟踪所有CPU能处理的程序,甚至TR 能嵌套跟踪另一个TR。
  另一方面,传统的跟踪方法是设置好一些断点(不管是何种断点),然后GO到应用程序中去执行,并期望程序运行到适当地方,CPU能产生一个中断, 返回主程序。至于能否返回,或返回前程序干了些什么,只有天知道。用解释的方法跟踪,控制权永远牢牢掌握在TR的手中,监控着所有程序流程,并由此才能设置一些高度复杂的断点。
  解释跟踪是TR与其它调试软件的最本质的区别。也是TR高性能的根本所在。
  二、批处理
  尽管批处理的概念很早就有,在各种软件中应用极为广泛,却无人把它作到调试软件中。在TR中,可以把要执行的命令序列放到一个文本文件中,用DO命令执行。当然还有自动批处理AUTORUN.TR。
  三、G OFFSET
  对G 100命令,大家都知道是执行到100停下,其它的调试软件认为是到当前段的100停下,TR却不管段址如何,只要IP是100 便停下。 这样一般的COM外壳只要一条G 100便解决。这个功能看起来简单,却极为有用。有了这条命令,再也不用去记复杂的跟踪路径,只要把当前跟踪到的IP记下,下一次一G便到。
  四、汇编指令作为命令
  搞汇编语言的人满脑子都是汇编,复杂的调试命令可能不愿去记。能用汇编指令作为命令当然是个好主意。用R AX 1234当然不错,用MOV AX,1234岂不更有意思?其它CLI\MOV [WORD 1234],4567\IN AL,21都是不错的命令。
  五、允许对调试程序作注解
  CALL 7F2E看起来当然没有CALL OPEN_FILE容易理解,但跟踪调试却不得不面对大串的莫名其妙的代码。即使某个过程经过跟踪已经知道是干什么的,也只能写到纸上。如果能把跟踪结果写到屏幕上,那是什么概念!整个程序变成了你手上的一篇文章,可以对它任意地圈圈点点。每一次跟踪都添加一些新的见解,最后,整个程序一目了然。参见命令LABEL和CMT。
  是这个功能使跟踪变成了一项真正可以做的工作。
  六、自动跳转
  最近加密界出现了一种新的技术,用JMP指令把代码扯乱。这样跟踪者一次只能看到一条指令和一个JMP,看不见来路也看不见去路,跟踪工作变得异常"艰难困苦"。TR的自动跳转技术使得在执行过程中不显示JMP指令,而把JMP后的指令直接放在JMP指令原来的位置。经过TR的重组,提高了代码的可读性。
  参见命令AUTOJMP。
  七、历史记录
  TR可以把执行过的每一个CS:IP记录下来,以便静态分析。如果程序出错, 可以查历史记录向前回溯,找到问题所在。更有功能强大的LOGPRO,可以把程序的关键指令整理出来。被跟踪程序再无任何秘密可言。
  参见命令LOG、LOGS、VLOG、LOGPRO。
  八、把内存代码写成EXE文件
  从内存中重构EXE文件的技术已经十分成熟,各种万能脱壳软件到处都是,但都是盲目地脱。随便拿到一个文件在INT21\AH=30处脱一下是不能解决问题的。脱壳应该是跟踪调试软件的一项功能,跟踪到了,再脱,万无一失。
  九、复杂的断点,一次性断点。
  各种调试软件所能设置的断点都是INTEL当初设计CPU时就想好的几种,远远不能满足高级跟踪的要求。TR创造性地提出了许多断点:
  (1)BP CONDITIONS
  条件断点。如:  BP IP>4000  ;代码较长,只跟踪后半部
           BP AH=2 DL=80 CH>30
  (2)BPINT intnum [CONDITIONS]中断断点
  (3)BPXB BYTES [CONDITIONS]
  遇到指定指令就停下。如:MOV AX,????的机器码为B8????,可用
BPXB b8
  其它: 
BPXB cd ;所有中断
BPXB 33 C0 ;XOR AX,AX
  (4)BPREG REG|SEG [CONDITIONS]
  如果指定的寄存器改变,则暂停。BPREG CS可以找到所有的段跳。
           BPREG CS AX=0 ES=#  ;#指当前PSP
可以找到带外壳程序的真正开始。
  (5)BPM [SEG:]OFFSET
  如果访问指定地址则暂停。如BPM 20将使MOV AX,[20]停下。
  (6)BPW SEG:OFFSET
  如果指定地址改变,则暂停。有些操作(如INT)对内存的改变只有一次次检查是否改变才能找到。
  (7)BPIO port [conditions]
  (8)BPKNL [count]
  如果发现新的程序内核,则暂停。

  特别重要的是,如果一个断点只用一次,把设断点命令前面的'BP'改为'GO'或'GS'便可直接执行。有了这个一次性断点,一般根本不需要专门设置断点。
  以上这些新增的断点,千百倍地提高了跟踪的效率,再也不需要苦苦地跟踪了!
  TR是真正的跟踪调试软件!尽管我们上面提到了DEBUG,SYMDEB,TD,CV,S-ICE,但哪一个是真正的跟踪调试软件?DEBUG和SYMDEB当然不能算是, 因为我想跟踪软件至少应该是全屏幕的。TD居然没有命令行输入,没有什么鼠标操作能比一行命令F CS:DX,DX+CX 00更能简单准确地表达你的意图。在DEBUG中至少还可以L100 0 01检查软盘BOOT区,可以L400或W400把一个文件调入指定内存或把内存写成文件, 在SYMDEB中还可以用一个>号把反汇编结果存起来, 可惜这些非常有用的功能其它软件都做不到。TD和CV不象是专门的调试软件,更象是为了对各自的C语言排错用的。S-ICE应该算是一个不错的跟踪调试软件了,但总是感觉386CPU 的调试功能就是为S-ICE而留,而S-ICE也就是仅仅为了演示386CPU的调试功能。只有TR,真正为跟踪者着想,就软件的跟踪技术提出了九大新的思想,第一次使程序跟踪成为了一项真正可以为之的工作,TR是真正的跟踪调试软件!
  TR现在不支持386保护模式,不能处理WIN95程序。如果你要跟踪DOS保护模式程序,16位Windows程序,32位Windows95程序,请使用TR for Win95:
http://trw.yeah.net
在以后的版本中,这些问题将一一解决。
  我一直在努力使TR达到完美,每天TR都有大的改变。请与我联系,你将获得最新版本。
作者: 刘 涛 涛
地址: 河南安阳彩玻公司资料室
邮编: 455000
电话: 0372-3932916-2273
        EMAIL: liutt@iname.com
    ayliutt@nease.net
主页: http://tr.kstar.com
            http://www.nease.net/~ayliutt
ICQ UIN: 3434573
                        98.3.3

----------------------------------------------------------------------
               须 知
  一、TR支持Turber Debuger调拭信息。如果调试一个带调试信息的C语言程序,可以用g _main快速进入现场。
  二、支持32位指令(见命令r32)
  三、从TR中退出后,用户程序修改过的所有中断都将被自动恢复,占有的内存自动释放。
  四、如果系统有XMS,TR自动使用,可以节省一些内存空间。
  五、所有数字输入均采用十六进制。
  运行TR需要386以上的CPU,在DOS下运行,也可以在WINDOWS和WINDOWS95的DOS窗口中运行,不过速度会更慢。与HIMEM或EMM386或任何其它的XMS/EMS内存管理软件兼容。可以很好地在SOFT-ICE下运行。TR只会跟踪实模式下的DOS程序,对保护模式和WINDOWS程序,请使用TR for Win95。
----------------------------------------------------------------------
TR的屏幕显示

EAX=00003000 EBX=00000000 ECX=00000000 EDX=00002755 SP=007E
EBP=00000000 ESI=00000000 EDI=00000000 FS=0000 GS=0000
DS=2640 ES=2640 SS=2785 CS=2650 IP=000A o d I s z a p c t
2640:0000 CD 20 FF 9F 00 9A F0 FE-1D F0 1E 44 FD 07 6D 01 ............
2640:0010 13 06 78 01 13 06 13 06-01 01 01 00 02 FF FF FF ..x.........
2650:0000 BA5527     MOV    DX,2755
2650:0003 2E89168B02   MOV    [CS:DGROUP@],DX
2650:0008 B430      MOV    AH,30
2650:000A CD21      INT    21 Get MS-DOS Version Number
2650:000C 8B2E0200    MOV    BP,[0002]
2650:0010 8B1E2C00    MOV    BX,[002C]
2650:0014 8EDA      MOV    DS,DX
2650:0016 A37D00     MOV    [007D],AX
2650:0019 8C067B00    MOV    [__psp],ES
2650:001D 891E7700    MOV    [__envseg],BX
2650:0021 892E9100    MOV    [0091],BP
2650:0025 E85101     CALL   0179
2650:0028 A17700     MOV    AX,[0077]
2650:002B 8EC0      MOV    ES,AX
2650:002D 33C0      XOR    AX,AX
Super Program Trace (test version), Written by Ld. 06/16/97
Press '?' for Help
r32
Welcome !!!  Tel:0372-3932916-2273  EMAIL: ayliutt@hotmail.com
  以上是TR的典型屏幕显示。主要有寄存器区、内存区、代码区、命令区、状态行。
  一、寄存器区
  屏幕的最上端是寄存器区。缺省为16位方式显示,可以用R32命令改为32 位方式。
  用R命令置寄存器值,如:
     R AX 1234
     R ebx 12321456
     R ch 87
     R dl ah
     R ip ip+1
     R fl z
  对标志寄存器用ODISZAPCT,最近改变过的寄存器以不同颜色表示。
  二、内存区。
  内存区以十六进制和ASCII码方式显示内存内容。可以用E命令把光标转到内存区编辑,可以按左、右、上、下、上下翻页、HOME、END等键移动光标, 按字母数字键修改内存,按TAB键十六进制ASCII码转换。也可以用e offset 'content'直接修改。
  用WD num改变内存区的行数。
  内存区有两种显示方式,一种是普通的段不变偏移连续变化的方式,另一种是段以10H变化,偏移为0的方式。普通方式下,用E命令使光标到内存区, 如果当前OFFSET小于0F按向上箭头,变为第二种显示方式。用D命令恢复。
  三、代码区
  屏幕中央是代码区,显示程序的汇编代码。支持386指令, 可以显示标号和注解,对常用中断进行解释。
  四、命令区
  用于输入命令。可以按F5键放大,按左、右、上、下、上下翻页、HOME、 END等键移动光标,用DEL和BACKSPACE修改。
  如果要多次执行一条命令,把光标放到那条命令上按ENTER。
  五、状态行
  显示命令是否正常执行。
  六、以上是TR的主要窗口,另处还有F4显示用户屏幕,VIEW命令列文件内容,STACK命令显示STACK窗,VLOG显示历史窗等等。

----------------------------------------------------------------------
             常用按键
  执行一句汇编指令,等同于命令T。
  执行一个过程,等同于命令P。
   显示用户屏幕,等同于命令RS。
   命令窗<-->代码窗。
   如果光标在代码窗,执行到光标位置(HERE)。
   最大当前窗口。当前窗口可以是命令窗、代码窗、内存窗。
   如果光标在代码窗,设置(或清除)光标所在位置为断点。
 Ctrl+D 暂停程序的运行,返回TR。注意,TR只会停留在被跟踪程序的代码中,
    而不会停留在系统代码中,所以按热键Ctrl+D后有时不会马上返回。
----------------------------------------------------------------------
             常用符号
 <$>:
  在TR的命令中,可以用美元符'$'代表当前的CS:IP。命令
D CS:IP
  与命令
D $
  是等效的。命令U $可以用命令.来代替。
 <*>:
  在TR的命令中,星号'*'代表当前指令的操作地址。如果当前的CS:IP为
****:**** mov ax,[di] ;1234:5678=****
  并且此时DS=1234,DI=5678,则命令 D *
  与命令 D DS:DI
  或 D 1234:5678 等效。
 <@>:
  取地址的指针。比如,如果
1234:5678 11 22 33 44
  则@1234:5678表示4433:2211。
  可以用@0:21*4表示中断21的地址。
  如果刚刚进入一个CALL FAR或INT,可以用@ss:sp返回。

 <#>:
  在TR的命令中,井号'#'代表当前程序的PSP值。
  例: D #:0
 <;>:
  分号';'代表注解,命令中分号后面的部分将不被解释。
 AUTORUN.TR:
  每次TR运行,都会自动执行当前目录下文件AUTORUN.TR中的命令。把你总是要
  执行的命令加入AUTORUN.TR。如R32,AUTOINT1 ON等。
---------------------TR定制命令--------------------
COLOR [01 02 03 04 05 06 07 08 09 10]
  如果不带参数,显示当前TR的颜色设置。如果带参数,必须是9个值,分别表示
1:寄存器区 寄存器名
2:寄存器区 寄存器值
3:寄存器区 改变过的寄存器值
4:代码区  一般代码
5:代码区  当前CS:IP
6:代码区  标号或注解
    7:代码区  断点
8:命令区  一般命令
9:命令区  注解
a:状态栏
  如:color 7 b e 7 e 2 4 17 36 76
MSG [x y]
  显示信息窗。主要用在DO命令文件中作演示用。以后的命令都作为要显示的信息,空回车返回。X,Y为信息框的位置,-1为自动右上角,-2为居中。例:
msg 20 5
this is first line message
THIS IS SECOND LINE
And third
;空回车
VER
  显示版本信息。
R32
  16位寄存器/32位寄存器切换。如果是16位状态,寄存器窗口显示为
AX=1234 BX=1234 CX=1234 DX=1234 SP=1234 BP=1234 SI=1234 DI=1234
DS=1234 ES=1234 SS=1234 CS=1234 IP=1234 o d i s z a p c t
  32位状态的显示为:
EAX=12345678 EBX=12345678 ECX=12345678 EDX=12345678 SP=1234
EBP=12345678 ESI=12345678 EDI=12345678 FS=1234 GS=1234  
DS=1234 ES=1234 SS=1234 CS=1234 IP=1234 o d i s z a p c t
  无论何种状态,都不影响系统运行。缺省为16位,如果你喜欢32位状态,把R32加入文件AUTORUN.TR。
REDRAW
  屏幕重画。
WD [lines]
  设定内存窗口的行数。
---------------------输入/输出 命令--------------------
A [address]
  汇编。虽然代码窗能够识别32位代码,A命令暂时不能处理32位代码。
  将在以后的版本改进。可以直接用'BEGIN:'的方法定义标号。
A cs:0
start: ;define label
mov ax,bx ;any asm code
;return to command mode
D [address|range] [>filename]]
  以十六进制和ASCII码方式显示内存,加'>'号把结果输出到文件,
  如: D cs:ip
D *
D 1234:5678>myfile.txt
D cs:0lffff>file
D >file
  如果指定文件不存在,则自动生成;如果已经存在,则追加。
  缺省长度40H。
E [[ptr] bytes]
  内存修改。如果不带参数,光标移到数据区,这时可以按左、右、上、下、
  上下翻页、HOME、END等键移动光标,按字母数字键修改内存,按TAB键十六
  进制ASCII码转换。例:
E cs:0 12 23 45 'abc'
E b800:200 36 24
E 234 'def',0d,0a,'$'
  缺省段为DS。
F range bytes
  填充。把内存区域用给定字串填充,如
F cs:0,ffff 12 23 45 'abc'
F b800:0L200 36 24
F 234 'def',0d,0a,'$'
  如果未指定长度,给定字串至少填充一次,相当于E命令。
  缺省段为DS。
L [[SEG]:OFFSET] [FILENAME]
  读文件到内存。注意与RELOAD的区别,L仅仅是把文件读到指定内存区,而
  RELOAD是找到一块空闲内存调入,建立PSP,设置寄存器,准备执行。
  缺省段为DS,缺省地址DS:100。
  例: N c:\autoexec.bat
L 100
N c:\command.com
L 200
L DS:300 MYFILE.BIN
L [SEG]:OFFSET DRIVE STARTSECTER SECTERS
  从指定物理驱动器读取指定物理扇区。
  例: L 100 0 0 1 ;读A盘BOOT区
L 100 2 0 1 ;读C盘BOOT区
N [filename]
  如果不带参数,显示当前文件名。如果带参数,置文件名。如:
N MYFILE.EXT
  参见:W,L,RELOAD
RELOAD [filename]
  重新调入文件。如果文件名已被N命令修改,则调入新文件。
  重置所有中断向量、内存区、寄存器。
  有时程序上一次申请的内存不能完全释放,导致调入失败。可以
退出TR再进,EXE2,RELOAD,仍然可以MKEXE。
U [address|range] [>filename]]
  反汇编,加'>'号把反汇编结果输出到文件,如:
u cs:ip
u $
u 1234:5678>myfile
u cs:0lffff>file
u >file
  如果不给出反汇编长度,缺省20H。
  如果指定文件不存在,则自动生成;如果已经存在,则追加。
W
W [SEG]:OFFSET
W [SEG]:OFFSET filename
W [SEG]:OFFSET length filename
  写内存到文件。文件长度为BX:CX或length。
  缺省段为DS,缺省地址DS:100。
  例: N test.com
W 200
W es:300 myfile.com
W cs:ip dx test.com
W [SEG]:OFFSET DRIVE STARTSECTER SECTERS
  向指定物理驱动器写指定物理扇区。
  例: W 100 0 0 1 ;写A盘BOOT区
WREG filename
  把当前寄存器区内容写入文件。如文件存在则追加。
WMEM filename
  把当前内存窗口内容写入文件。如文件存在则追加。
WCOD filename
  把当前代码窗口内容写入文件。如文件存在则追加。
WCMD filename
  把当前命令窗口内容写入文件。如文件存在则追加。
---------------------RUNTIME 命 令--------------------
DELAY [time]
  用于DO命令文件中,起延时作用。如果命令文件中改变了DELAY状态,切
  记在文件尾用DELAY 0恢复。
  注意设定延时为16进制。
DO filename *新概念*
  执行批处理。指定一个文本文件,里面可以包含所有合法的TR命令(甚至
  另一个DO),让TR自动执行。每次TR运行,都会自动执行当前目录下文件
  AUTORUN.TR中的命令,相当于每次TR启动,都会自动执行一个
DO AUTORUN.TR
  在批处理文件中,如果一个命令行以空格开始,TR直接处理该命令而不在
  命令窗口显示(第一个空格被去掉)。
  特别用法:把一个汇编程序前面加个A〈回车〉,让TR去汇编。  
  参见:DELAY,KEY
KEY num
  用于DO批处理文件中,模拟按键。给定的值为MOV AX,0\INT 16返回的值,
  如:         KEY 1C0D  ;回车
---------------------其 它 命 令--------------------
所有汇编指令
  TR支持几乎所有汇编指令作为命令。虽然我们不一定非要这么做,但有时候
  确实很方便,试试下面命令:
mov ah,4c
jmp 200
cli
定义标号或过程名:
  命令行中,输入一个字串加冒号,定义当前的CS:IP为给定标号。
  在A命令后的汇编状态中,定义的是当前正在汇编的地址。
  例,如当前IP=100,输入'START:',则CS:100为START,所有JMP 100都将
  译为JMP START。
  在命令行中,这是'LABEL CS:IP labelname'的简写。
  参见:LABEL,CMT
.
  在代码窗显示当前CS:IP。
  相当于U CS:IP或U $。
? [expresion]
  帮助。如果不带参数,TR自动ZOOM命令窗口,简要显示每一条命令的语法和
  功能。可以用Up/Down/PageUp/PageDown上下滚动窗口,F5恢复。
  如果带参数,TR对参数计算后显示结果,如:
? ax 显示AX内容
? cx+dx 显示CX+DX的结果
? # 显示当前PSP
? @0:21*4
? $+5 显示CS:IP+5
CMT [SEG:]OFFSET COMMENT_STRING *新概念*
  对程序进行注解。
  地址如果不提供段址,默认当前CS。如果地址小于PSP:0或大于PSP+2000:0,
  认为是相对地址,否则认为是绝对地址。
  注解串可以是任意长度的字串,但命令总长度不能超过79。如果包含空格或
  保留小写,请用单引号''括住。
  对程序所作注解全部存入文件'当前文件名.cmt',这是一个文本文件,可
  以直接编辑。下次TR调入程序时自动装入。
  如果定义当前CS:IP名,可直接用'标号名:'。
  例:
    cmt cs:200 'This is my comment string'
PROC1:
  参见:LABEL,SYMBOLS
LABEL [SEG:]OFFSET LABEL_NAME   *新概念*
  定义标号或过程名。
  如果定义了标号或过程名,代码窗中将在该地址前留一行显示其名子,并把
  所有JMP和CALL到该过程的语句翻译为'CALL 过程名'而不是通常那样
  'CALL ????'。
  程序标号全部存入文件'当前文件名.cmt',这是一个文本文件,可以直接
  编辑。下次TR调入程序时自动装入。
  例:
    LABEL cs:200 file_open
  参见:cmt,SYMBOLS

LOG [ON|OFF]          *新概念*
  是否记录历史。如果LOG ON,则TR将把以后执行的每条指令地址记录下来,
  可以用VLOG命令查看。本命令只记录最后25条地址,如果要所有记录,请
  用LOGS命令。
  利用TR的LOG功能可以使用一种新的分析程序的方法,那就是"走后门"。
  比如一个程序错误退出,如果用通常的办法从程序开始进行跟踪,要走很
  长的路才能找到问题所在。而用TR的LOG功能,就可以在程序异常退出后分
  析程序最后执行的什么过程,快速找到关键。

LOGS [ON|OFF]          *新概念*
  是否记录历史。如果LOGS ON,则TR将在当前目录下建一文件LOG.DAT,
  并把以后执行的每条指令地址以十六进制存入该文件。方便以后分析程序
  流程。视程序复杂度,该文件可能会很长。请使用专门的十六进制浏览器
  浏览该文件,或用TR的VIEW命令。
  当LOGS ON时,因为执行每一条指令都会有一次存盘,速度较慢,一般情况
  下,用LOG ON就足够了。LOGS ON时,LOG自动为ON。

LOGPRO [0|1|2|f]          *新概念*
  功能:把程序执行过的关键代码记录下来,便于分析。特别适合于正确
  流程和错误流程的比较。
  如果不带参数,则显示当前选项。各选项的意义:
0: 不LOG
1: 只LOG以下几条指令call,ret
2: 只LOG以下几条指令call,ret,condition jmp,jmp far
注意:对CONDITION JMP只有条件为真时才LOG
f: LOG所有指令
  LOGPRO把LOG的指令存到文件LOGPRO.DAT,每条记录长16字节,格式:
   位置   大小  意义
0 DW IP
2 DW CS
4 DW SP
6 DB ?
7 DB ?
8 8 byte 指令码
  在DOS提示符下执行LOGPRO.EXE,读取LOGPRO.DAT,生成LOGPRO.TXT。
  这就是程序的关键代码。
  特别感谢LX首先提出这个思想。
M RANGE [SEG]:OFFSET
  内存复制。如:
        M $L200 8000:100    ;复制CS:IP开始长度200到8000:100
        M DS:0,800 ES:200    ;复制DS:0,800到ES:200
Q
  退出TR。也可以按ALT+X。
  用户程序修改过的所有中断都将被自动恢复,占有的内存自动释放。
R REG [num]
  改寄存器值。可以是8位16位32位通用寄存器、标志寄存器FL或段寄存器。
  对标志寄存器的操作可以是ODISZAPCT。
  例: R ax 1234
R ebx 12321456
R ch 87
R dl ah
R fl z
RS
  显示用户屏幕(Restore Screen),热键F4。按任意键返回。
S range bytes
  在内存中查找指定内容,如:
s cs:0,ffff 12 34 45 ;在CS:0到ffff中寻找12 34 45
s ds:200l100 23 ;在DS:200长度100中寻找23
SYM [ON|OFF]
  是否调入EXE文件的调试信息。缺省为ON。如果不想调入文件的调试信息,
  先不带参数执行TR,然后:
           SYM OFF
           N myfilename
           RELOAD
  因为有些错误的调试信息会使TR发疯。
SYMBOLS
  如果程序带有调试信息或用label,cmt命令自定义了符号,则显示所有符号名。
  参见:CMT,LABEL
VLOG
  显示LOG ON或LOGS ON命令记录的历史信息。
VIEW filename.ext
  浏览文件。可以以十六进制和ASCII方式查看文件内容。
STACK *新概念*
  显示当前子程序嵌套状况。
  比如,可以用GOIO 378找到关键指令,用STACK看当前CS:IP是经过几次
  CALL过来的,迅速找到关键子程序。
  参见:PRET
---------------------------------------------------------------------
跟踪执行命令
G
G [seg:]offset
G conditions *新概念*
  执行程序,也可以用命令GO。如果条件满足,则暂停。
  注意:在程序中加入INT3并不能使G命令的运行中止。
  特别推荐:G OFFSET。只要程序执行中IP等于设定的OFFSET,就会停下。你
  不用担心段址在哪儿,代码是否动态生成。只要知道它会经过那儿,就会停
  下。例:
G 100
G CS:100
G BX
G AH=4C
G AX=0 BX=0 CX=0
G IP>400
  参见:GS
GO??? *新概念*
  任何设置断点的命令BP???都可以用GO???来使用,用为一次性断点。
  例: GOREG CS
GOINT 21 AH=30
GOW ES:DI
GOXB CD 13 AH=2
  参见:GS???
GS
  G命令在执行前会恢复用户屏幕,执行结束后再保存用户屏幕。有些程序破
  坏了BIOS,这样保存的屏幕信息无法正常恢复,对此问题TR还找不到好的解
  决方法,于是增加了一个GS命令。GS命令相当于G命令,只是不恢复屏幕。
  等价于执行多个T。
GS???
  同GO???命令,只是不恢复屏幕。参见:GS GO???
T
  执行一句汇编指令,相当于按F8。
  注意,TR的T命令与其它调试器不太一样。TR并不会真的去执行这条指令,
  而是完成每条指令的功能而已。如果遇到了TR无法识别的指令,只有用TT
  命令了。
  如果遇到INT指令,T命令不会进入系统的中断例程,因为我认为我们一般感
  兴趣的是被跟踪程序,而不是系统。如果程序修改了INT地址,T命令会进入
  被改后的地址。如果真是需要进入中断,可以用GG,如
GG @0:21*4 ;进入INT21
GG [[SEG:]OFFSET]
  无条件执行,TR不对执行过程作任何控制。
  缺省段为CS。如果指定地址,那么TR在指定地址插入CALL FAR指令,然后JMP
  到应用程序中去,希望它能执行到这个CALL FAR由TR重新控制。之所以不用
  INT3是为了防止应用程序修改INT3中断向量。
  因为这时程序的执行已不是TR的解释执行,所以运行速度正常。
  仍然可以希望CTRL+D能回到TR的控制。
P
  执行一个过程(F10)。如果当前指令是一条CALL或CALL FAR,则执行整个过
  程直到返回。如果是其它指令,同T。
  如果确实想执行到下一步为止,比如遇到一个LOOP,请用命令PP。
PP
  执行直到下一条指令。相当于G IP+本指令长度。
PRET
  执行程序直到RET、RETF或IRET指令。用于快速退出子程序。
  参见:STACK
TT
  使用单步中断执行一条指令。
  不推荐使用。
  参见:int1
AUTOINT1 [ON|OFF]
  这是一个标志,可以设为ON或OFF。缺省为OFF。
  当为ON时,如果TR遇到一条不可识别指令,则自动用INT1单步中断去执行。
  参见:TT,INT1
  
INT1 [ON|OFF]
  这是一个标志,可以设为ON或OFF。缺省为OFF。
  当为ON时,TR不再解释每一条指令,而是用INT1单步中断去执行。
  不推荐使用ON的状态。如果你确认TR对某条指令的解释有误,可用状态ON
  继续执行。如果只在此状态下执行一条指令,用命令TT。
  影响命令:T,G,P等
  参见:TT,AUTOINT1
AUTOJMP [ON|OFF] *新概念*
  设置是否自动跳转。如果为ON,在执行过程中TR将不显示JMP指令,而把JMP
后的指令直接放在JMP指令原来的位置,并在该指令前加"-〉"符号以示区别。
这样在一些JMP过多的场合能使你容易保持清醒。如果你不习惯,让它OFF。
  缺省为ON。
---------------------------------------------------------------------
断点命令
  **** 如果断点只使用一次,把BP????改为GO????或GS???? ****
BL
  列出所有断点。最多可设8个断点。
  实际上是9个断点,断点0被GO系列命令占用。
BC [NUM]
  清除所有断点或指定断点。
BD [NUM]
  DISABLE所有或指定断点。
BE [NUM]
  允许所有或指定断点。
BPW segment:offset *新概念*
  监视内存变化,如果指定位置的字(WORD)发生改变,则暂停。
  如果设定此类断点,TR每执行一条语句都会进行一次比较。
BP [seg:]offset *新概念*
  如果执行到CS:IP=SEG:OFFSET或IP=OFFSET,则暂停。
  用BP seg:offset时,TR不会象通常的调试程序那样,插入一个INT3,TR从
  来不那样做,所以不用担心应用程序会发现或破坏INT3地址而不能返回。
  用BP offset是个好主意,这样就不用关心它的段址是如何变化,在此之前
  有多少代码的扭曲,断点区是否动态生成,都不用去管它。只要程序执行
  过程中IP=offset,就会停下来。
  这个断点实际上是下面BP conditions的一种特殊情况,也可以写作
BP ip=?? cs=??
  TR把它们作为一种情况进行处理。
  惯用法:对COM文件脱壳,用BP 100或直接G 100。
  例: bp cs:200
bp $+20
bp dx
BP ip>200
BP conditions *新概念*
  如果指定条件满足,则暂停,如
bp ax=1234 ;当ax等于1234H时停
bp ax=0 bx=0 cx=0 ;当AX,BX,CX同时为0时停
bp ah=3 dx=80
>


--------------------------------------------------------------------------------

传输中断!
lucaer
驱动老牛
驱动老牛
  • 注册日期2004-09-21
  • 最后登录2007-09-26
  • 粉丝0
  • 关注0
  • 积分518分
  • 威望60点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-14 11:19
路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看路过 看看
只要回帖,别忘给分。 支持灌水,多多送分。 [img]http://www.hotik.com/sign.png[/img]
Leopard
驱动老牛
驱动老牛
  • 注册日期2001-07-13
  • 最后登录2021-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望53点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
  • 忠实会员
板凳#
发布于:2004-10-14 11:47
更厉害的是硬件调试卡!
browser
驱动牛犊
驱动牛犊
  • 注册日期2004-08-21
  • 最后登录2005-02-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-10-14 16:38
瓦赛,硬件调试卡!
以后加密是要更加复杂了
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2004-10-14 19:20
9X下还有TRW2000,不过到了2K以后就没消息了,现在还贴这个未免老土了.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
Leopard
驱动老牛
驱动老牛
  • 注册日期2001-07-13
  • 最后登录2021-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望53点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
  • 忠实会员
5楼#
发布于:2004-10-15 09:05
9X下还有TRW2000,不过到了2K以后就没消息了,现在还贴这个未免老土了.

已经停止开发了,朱XX在北京开公司了,多媒体方面的!
liuyan1
驱动老牛
驱动老牛
  • 注册日期2001-08-27
  • 最后登录2023-04-18
  • 粉丝0
  • 关注0
  • 积分1031分
  • 威望477点
  • 贡献值0点
  • 好评度187点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2004-11-14 04:22
LTT好象在苏州.
楼上的客,楼下的客,听我老坎说明白,要苛屎有草纸,不要扯我的麦席子,要苛尿有夜壶,不要在床上划地图。
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
7楼#
发布于:2004-11-14 09:42
ltt在苏州?

朱xx呢?具体在北京哪儿?
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
Leopard
驱动老牛
驱动老牛
  • 注册日期2001-07-13
  • 最后登录2021-12-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望53点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
  • 忠实会员
8楼#
发布于:2004-11-15 17:30
北京众晶数迅数码科技有限公司
游客

返回顶部