什么是跟踪调试以及跟踪调试的好处

什么是跟踪调试以及跟踪调试的好处,第1张

当你的程序出错了,而且程序很大的时候,你很那发现自己的错误,特别 是一些隐藏的 错误,跟踪调试可以一步一步往下执行,你观看每个变量的值,看看有什么问题,而且调试的时候到了 出错的地方会提示的,就知道大概错在哪了 VC调试,一般是需要设置一个断点的,譬如1)int i2)int j如果在int j处设置了断点,那么当程序运行到int j时,程序停止,这个时候就可以查看程序各种变量或执行状态了,简单的办法就是把鼠标停在要看的变量上面。会有一个个小的d出窗口来显示变量状态。

1)设置断点,一种是在代码行的最左边鼠标点击一下,会有个红点出来。快捷键是,将编辑光标--即插入符(不是鼠标光标)停在要设断点的代码行,然后按F9,就会有红点出高笑蔽来。

2)设置的断点,程序一定要能执行到。譬如:

{//0

int i = 0 //1

if (0 != i) {//2

int j = 1 //3

j++//4

} else { //5

int j = 3 //6

j += 2 //7

}//8

当把断点设在了4这里,由于int恒为0,因此断点设在4这里,程序是不会经过,也不会停下来让我们查看状态的。并且此时的红点是一个空心红点,表示非命中断点。

3)鼠标右键单击红色断点,会d出调试快捷菜单,里面会有更丰富的断点命中条件设定,不多说了,楼主自己可以试一下。

4)断点命中后,可以按F5继续运行,如果后面还有断点,就可以被命中。

5)如果在上面的例子中7设了断点后,程序执行到该处停下时,7这行的代码是还未被执行的,这个时候j应该等于3,不是5.

6)如果断点被命中之后,并不想让程序继续执行下去,而只想让程序运行被设断点的这一行,那么只要按F10就可以了。如上面的例子中7设了断点后,程序运行到这里停止,接下去按F10,程序还是会停下,这个时候的程序状态是运行完j +=2的状态,即j等于5.

7)断点不是万能的,如在画窗口的OnDraw函数里是不能设断点的,一设断点,程序停了下来,然后按F5继续执行,由于程序被中断后继续运行,窗口需要被画到屏幕上,这个时候又会升激触发OnDraw函数,并且断点又会被命中,形成死循环。在很多地方是不能设断点的。相应的情况还有多层嵌套的DLL调用。

8)用TRACE、TRACE0、TRACE1、TRACE2等宏,将调试信息打印到“输出窗口”中。TRACE后面的数字代表带几个参数,如int j = 3TRACE1(_T("now without F9 in the function OnDraw, we can get debug_info j equals to %d\n"), j)这样在输出窗口中就可以得到在OnDraw函数中代码的执行情况。

9)MFC有个库类专门是将调试信息打印到“输出窗口”中的, CDumpContext的一个对象实例为afxDump。

使用方法:

#ifdef _DEBUG

int j = 3

LPCTSTR pText = _T("more method for debug")

afxDump <<pText <<_T(" j = ") <<j <<_T("\n")

#endif

这个调试类是非常强大的,需要进行专门学习,深入的话,呵呵觉得是异常厉害!

10)TRACE宏默认无法打印UNICODE中文调试信息,要想打印UNICODE但不改变整个工程的字符集,可以在TRACE之前,写代码:

#include <locale.h>

_tsetlocale(LC_CTYPE, _T("chs"))

这样TRACE宏将能正确工作

以上都是我的一些常用调试技巧,有些很简单,有些调试技巧比较高级,需要另外进行学习。一开始,建议楼主多使用F9设断点。一定要保证断点被命中,这个时候楼主一定要看一下VC的菜单是有变化的,尤其是“调试”菜单,会多出很多菜单项,可以自己研究研究,还有就是断点命中后,VC窗口也会不一样的,会出现“输出”、“错误”、“监视”等调试窗口,可以试着把关心的程序变量,选中然后拖到监视窗口里,又会出现不一样的东西哦。还可以在监视窗口中写代码:“@err, hr”,代表的是程序戚州线程的error变量。高级的还有反汇编窗口,寄存器窗口,内存窗口等用得相对少些。

好了,一般的基本上全在这里了。

----欢迎加入------c++部落------------Hello Word!--------

无论你是初学者还是专家,只要你热爱编程、交流、分享,c++部落因为你而精彩~

1、调试windows 服务没此是system级别的喊拍所有在win7或win8下一定要以管理员身份启动,启动后添加新建项目windows服务

确定就建立枯渗迅了一个windows服务程序

2、程序入口点自然在program中 main函数 跟控制台程序有点相似

static class Program

{

/// <summary>

/// 应用程序的主入口点。

/// </summary>

static void Main()

{

ServiceBase[] ServicesToRun

ServicesToRun = new ServiceBase[]

{

new Service1()

}

ServiceBase.Run(ServicesToRun)

}

}

public partial class Service1 : ServiceBase

{

public Service1()

{

InitializeComponent()

}

protected override void OnStart(string[] args)

{

}

protected override void OnStop()

{

}

}

以下是十大用于破解软件的工具。破解软件所需要的知识,就是会使用这些工具所需要的知识了。

一. 调试类工具soft-ice和trw2000

soft-ice是目前公认最好的跟踪调试工具。轿察使用 soft-ice可以很容易的跟踪一个软件、或是监视软件产生的错误进行除错,它有dos、window3.1、win95/98/nt/2000/各个平台上的版本。这个本是用来对软件进行调试、跟踪、除错的工具,在cracker手中变成了最恐怖的破解工具trw2000是中国人自己编写的调试软件,完全兼容soft-ice各条指令,由于现在许多软件能检测soft-ice存在,而对trw2000的检测就差了许多,因此目前它成了很多 cracker的最爱。trw2000专门针对软件破解进行了优化,在windows下跟踪调试程序,跟踪功能更强可以设置各种断点,并且断点种类更多它可以象一些脱壳工具一样完成对加密外壳的去除,自动生成exe文件,因此它的破解能力更强,在破解者手中对共享软件的发展威胁更大。它还有在dos 下的版本,名为tr。

二. 反汇编工具wdasm8.93黄金版和hiew

cracker常将 soft-ice和trw2000比作屠龙刀,将wdasm8.93则比作倚天剑。wdasm8.93可方便地反汇编程序,它能静态分析程序流程,也可动态分析程序。在原有的普通版的基础上,一些破解者又开发出了wdasm8.93黄金版,加强了对中文字符串的提取。对国产共享软件的威胁也就更大了。例如开心斗地主这个很好玩的共享软件,用黄金版对其反汇编可以直接看到注册码,普通版不能,您说它厉害孝判不?hiew是一个十六进制工具,它除了普通十六进制的功能外,它还有个特色,能反汇编文件,并可以用汇编指令修改程序, 用它修改程序,方便快捷!这也是cracker们常用的静态反汇编工具。

三. visual basic程序调试工具smartcheck

这是专门针对visual basic程序的调试程序,由于vb程序执行时从本质上讲是解释执行,它们只是调用 vbrunxxx.dll 中的函数 ,因此vb 的可执行文件是伪代码,程序都在vbxxx.dll 里面执行。若用soft-ice跟踪调试只能在vbdll里面用打转转,看不到有利用价值的东西,而且代码质量不高,结构还很复杂。当然只要了解其特点用 soft-ice也可破解 ,但smartcheck的出现,大大方便了cracker。smartcheck 是 numega 公司出口的一款出色的调试解释执行程序的工具,目前最新版是v6.03。它非常容易使用,你甚至于不需要懂得汇编语言都能轻易驾驭它。它可将vb程序执行的 *** 作完全记录下来,使破解者轻而易举的破解大部分vb程序。

四. 十六进制编辑器ultraedit

十六进制编辑器可以用十六进制方式编辑文件,修改文件的内容。虽然hiew就是一款是十六进制工具,但它是dos界面,因此很多破解者又准备了一款 windows下的工具,这样的工具很多,如:ultraedit、winhex、hex workshop 等,其中ultraedit比较有特色, *** 作方便,更有汉化版可用,它是非常出色的十六进制编辑器,建议您也找一个用用。

五. 注册表监视工具

主要有regshot、regmon或regsnap等。在微软 *** 作系统中,众多的设置都存放在注册表中,注册表是windows的核心数据库,表中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的正常运行。在应用软件安装时,有可能将一些必要的信息放进去,如安装时间、使用次数、注册码等。regshot、regmon或regsnap就是监视注册表变化的工具,通过它可以了解、监视应用程序在注册表中的动作,破解者常利用它们来监视应用程序在注册表中的变化。

六. 文件监视工具filemon

可监视系统中指定文件运行状况,如指定文件打开了哪巧帆改个文件,关闭了哪个文件,对哪个文件进行了数据读取等。通过它,任何您指定监控的文件有任何读、写、打开其它文件的 *** 作都能被它监视下来,并提供完整的报告信息。破解者经常利用filemon监控文件系统,以便了解程序在启动、关闭或验证注册码时做了哪些手脚,并由此进行相应的解密。

七. 脱壳工具procdump

现在许多软件都加了壳,“壳”是一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。经过加壳的软件在跟踪时已无法看到其真实的十六进制代码,因此可以起到保护软件的目的。procdump就是个对付软件加壳的脱壳工具,它可剥去许多种壳,还文件本来面目,这样再修改文件内容就容易多了。由于它还允许使用者自己编写脚本文件,因此利用它能脱去新版加壳软件的壳。它同时还是一款优秀的pe格式修改工具,是脱壳必备工具!

八. 侦测文件类型工具

这样的工具有typ、gtw、 fileinfo和冲击波2000等。它们被用来侦测软件被加壳类型,其中冲击波2000能轻易的找到任何加密壳的入口点,包括asprotect以及幻影的加密壳都可以。这类软件一般是配合procdump和调试软件使用的,用它们找到程序加壳类型,用procdump或soft-ice、 trw2000脱壳。

九. 资源修改器 exescope

exescope是一个可以修改软件资源的工具,功能强大。 exescope能在没有资源文件的情况下分析、显示不同的信息,重写可执行文件的资源,包括(exe,dll,ocx)等。它可以直接修改用 vc++ 及 delphi 编制的程序的资源,包括菜单、对话框、字串表等,是汉化软件的常用工具。在破解者手中,它常被用来修改文件资源中的菜单、对话框、字串表等,用以显示破解者需要的信息(例如更改版权信息等),以此达到修改软件的目的。

十. api调用查询工具api spy

顾名思义,这个程序是用来侦测软件都调用了哪些api。 api就是windows程序执行时所呼叫的函数,跟dos下的int(中断)差不多,windows 提供了很多这样的函数让程序设计者套用,主要目的是为了节省软件开发的时间,方便大家开发软件。api spy就是这样一个监控api调用的软件,它可以查看应用程序调用了哪些api,从而得出对破解者有用的api调用信息,通过这些api调用来设定断点,达到破解软件的目的。它可以工作在windows95/98/nt/2000平台下。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8281829.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存