软件调试论坛 FAQ(www.pediy.com)
2002.12
--------------------------------------------------------------------------------
本论坛是一个纯技术论坛,我们欢迎你从技术角度阐述问题,不要在本论申请破解或找注册码,也不欢迎你来此散发破解补丁或注册机程序。
一般提问前:
1、提问前先用Google(http://www.google.com/)搜索引擎或本论坛的精华集找找答案
2、谨慎选择相关主题的论坛
3、使用含义丰富,描述准确的标题
4、别要求私下答复
5、问题解决后,加个简短说明
--------------------------------------------------------------------------------
工具
Q:从哪儿得到
IDA, SoftIce, Wdasm 等工具?
A:本站的资源栏目列出了相关工具站点,还有本站首页链接站点转转,一般你也能发现这些工具。
Q:哪种调试工具支持USB键盘与鼠标?
A:目前只有DriverStudio
V2.6以上版本内置的SoftICE支持。因此如你想用TRW2000调试工具请再接一个串口或PS/2接口的鼠标。
Q:哪个版本的SoftIce能运行在WinME系统?
A:SoftIce
4.05以上版本就可,然后再安装Winice Loader工具就可,安装说明。
Q:哪个版本的W32Dasm支持中文字串?
A:W32Dasm最高版本是8.93(己停止开发),其不串式参考不支持中文字符,但后来有人在这个版本基础上,推出了几个修改版本,都支持中文字串。
Q:我的Windows
2000用SoftICE 4.05老有问题
A:强烈建议Windows 2000用户不要用SoftICE 4.05,因为或多或少会出现许多不能解释的问题,建议直接用更新更强大的DriverStudio系列。
--------------------------------------------------------------------------------
一般技术问题
Q:为什么在WinNT/2000/XP系统,bpx
hmemcpy断点无效?
A:hmemcpy是Win9x系统内部的一个函数,俗称万能断点,但在一般的编程书籍上很少提到,原因它是底层的东西,没有特殊需要,一般不直接调用。它的操作很简单,只是将内存中的一块数据拷贝到另一个地方,Win9x系统里很频繁地调用它处理数据。在Win
NT/2K系统上相关的函数是memcpy,但在Win NT/2K上不同于Windows 9x上,很少再调用memcpy来处理数据了,用此函数设断基本上什么也拦不住。
Q:为何同一函数有几种形式,如MessageBoxA(W)?
A:MessageBoxA(W)是MessageBoxA,MessageBoxW两种形式缩写,Windows函数是区分字符集的:A表示ANSI,W表示Wide,即Unicode
(Wide character-set),前者就是通常使用的单字节方式,而后者是双字节方式,方便处理双字节字符。Win98基本是使用ANSI字符串来进行内部操作的,但它仍可处理少数Unicode字串符函数,如MessageBoxW、MessageBoxExW等。而Win2000/XP所有核心函数都是Unicode字串符。
Q:为什么SoftICE或TRW再运行一些软件时会中断跳出?
A:用命令FAULTS
off关闭错误跟踪功能。
Q:F11与F12区别?
A:F11对应的命令是:G@ss:sp,假如你目前正中断在程序中,下这个指令会在堆栈的返回地址设个暂时断点并执行到此断点。
F12对应的命令是:P
RET 。SoftICE或TRW将一直单步执行直到它找到一条返回语句(RET、RETF),也就是说让SoftICE一直执行代码,直到出现 RET (XXXX)
命令,再跳出来拦截,这时,当前 IP(EIP) 会是停在 RET (XXXX) 后的某一条语句上,通常是在某一个CALL XXXXXXXX 后面。
说明:F11功能键在SoftICE中有效,在TRW中可以用pmodule命令代替F11或F12,可瞬间回到到前程序领空。
Q:SoftICE与TRW2000的断点有什么不同?
A:在这里以G命令来解释,如对G
401000命令,大家都知道是执行到401000停下,但SoftICE认为是到当前段的401000停下(也就是说在当前应用程序领空),而TRW200却不管段址如何,只要EIP是401000便停下。
这样一般跟踪一软件只要G 401000便解决。这个功能看起来简单,却极为有用。有了这条命令,只要把当前跟踪到的EIP记下,下一次一G便到。而在SoftICE下,一般先用其Symbol
Loader装载程序,先来到当前应用程序的领空,然后再G 401000才能到达指定地址处。其它断点命令,如bpx原理与此类似。
Q:Icedump装不成功
A:首先要确定IceDump版本要与SOFTICE的一至,如相同还不成功则把winice.dat中:
;EXP=c:\windows\system\kernel32.dll
;EXP=c:\windows\system\user32.dll
2句前的‘;’去掉重起即可。
在Windows
NT/2000/XP系统上类似的工具是NticeDump,具体安装参考此文。
Q:ZIP与RAR之类密码能否用SOFTICE或TRW动态跟踪破解?
A:不能,这些密码是单向加密,因此只能用专门工具穷举密码这一方案。
Q:有一汇编指令:cmp
dword [ebp-10],byte +01, 请问dword在这里的作用是什么呢?在这里dword [ebp-10]和[ebp-10]有什么不一样吗?
请问byte +01是一种怎么样的寻址呢?
A:在16位指令中,缺省的类型是字Word,在32位指令中,缺省的类型是双字Dword。byte
+01表示方法是TRW2000中特有的,就是数字1,一个字节长。
Q:请问ASCII扩展字符(即ASCII值在080-0ff)如何输入?
A:输入时按住Alt键,然后输入ASCII的十进制码(001~255)。
Q:CDQ是什么指令?
A:CDQ是符号扩展指令.D是dword(4字节),Q是qword(8字节) .CDQ把EAX寄存器中的数视为有符号的数,将其符号位(即EAX的最高位)扩展到EDX寄存器,即若EAX的最高位是1,则执行后EDX的每个位都是1,结果EDX
= FFFFFFFF;若EAX的最高位是0,则执行后EDX的每个位都是0,结果EDX = 00000000。这样就把EAX中的32位带符号的数变成了EDX:EAX中的64位带符号的数,以满足64位运算指令的需要,但转换后的值没变。
| | |||
|