人们编写的程序难免有错误。在程序的执行过程中,如果能够跟踪每条语句的执行,无疑有利于寻找错误。这种工作过程称为调试(Debugging)。
现在的集成开发环境中都有调试工具。掌握调试工具的使用可以提高寻找程序中错误的能力和效率。
要进行高级语言的跟踪和调试,编译时就不能对高级语言的代码进行优化,因为一旦优化后,高级语言的语句与机器指令(或汇编指令)的对应关系就可能被破坏。编译器或集成开发环境中一般会有设置项,允许设立调试方式或发布方式。发布方式则对代码进行优化。
也可以借助调试工具对已有的可执行文件进行跟踪,甚至修改部分指令,例如,扩展一些功能,甚至是增加一些“病毒性”的指令。“病毒”是对原可执行文件的有意的破坏,例如,增加一些死循环,增加一些(数据或文件)复制指令,更改操作系统中的一些命令、目录或其他可执行文件的格式等。
从法律上来看,更改他人发布的可执行文件都属于违法行为,然而这种行为很难被发现和起诉。这是导致计算机病毒传播的主要原因。
也可以用一些技术,不允许对可执行文件进行跟踪、调试和更改指令,称为反调试(Anti-Debugging),例如:
·基于应用程序接口(API,Application Programming Interface):检查系统信息,看是否存在调试器(Debugger)对程序进行跟踪。(www.xing528.com)
·基于异常:检查自己的程序是否发生异常。
·基于进程和线程块:检查进程和线程是否被其他程序操作。
·代码修改:检查是否有调试器对代码进行修改和设置断点。
·基于硬件和寄存器:检查硬件断点和CPU 寄存器。
·时序和延迟:检查指令执行所花费的时间,是否有异常。
·检测和关闭调试器。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。