首页
社区
课程
招聘
[原创]VB P-code -- 调试器的革命
发表于: 2004-12-26 11:00 19294

[原创]VB P-code -- 调试器的革命

2004-12-26 11:00
19294

*岁末大盘点*
VB P-code -- 调试器的革命
作者:cyclotron

   在上一篇《VB P-code -- 虚拟机的艺术》的最后,专业的VB P-code调试器WKTVBDebugger隆重登场了。这个具有划时代意义的VB P-code调试器,掀开了解释型语言程序调试策略的崭新一页,它不仅仅给VB P-code程序的调试带来了极大的方便,其编写思想和运作机制也给人以深刻启发。在本篇中,我将为大家简要介绍这一调试器的各种特性和使用方法。

   WKTVBDebugger出现以前,VB P-code程序的跟踪和逆向是一件令人烦恼的工作。我在上一篇中详细介绍了VB P-code虚拟机的运作机制以及用OllyDBG跟踪P-code程序的过程,相信大家对跟踪之困难深有体会--我们不得不花费大量的时间跟踪虚拟机的解释行为,难以将注意力集中到P-code程序本身。然而,在当时,OllyDBG和SoftICE是我们唯一的选择。
WKTVBDebugger的出现,使我们摆脱了困境。这一调试器完全以单个伪代码指令为执行单元,包括跟踪、设断、修改等各个方面都完全以伪代码为基础,彻底屏蔽了虚拟机的解释细节,使我们感觉就像是在直接调试P-code可执行文件的功能一样。举例来说,假如程序执行了一条Variant型变量的加法伪指令,我们在调试器中跟踪的不是我在上一篇文章中列出的冗长的虚拟机指令,而是AddVar这一句指令(严格地说,AddVar只是助记符),不仅操作码如此,每一条伪指令的操作数我们也可以方便地通过堆栈来观察。

   WKTVBDebugger的实现,同VB P-code虚拟机运作机制以及伪指令的研究是密不可分的。
大多数朋友都知道基于本地机器码的调试器实现的基本原理,在这类调试器中,通过设置单步跟踪标志位,可以在每执行一句指令以后就产生单步调试断点,将控制权转移给调试器,于是调试器在执行下一句指令前按照特定的意图观察寄存器的状态并修改程序的执行流程;此外,调试器可以通过在指定的指令位置插入CC(int 3),在该处引起断点,捕获异常并取得控制权。特别地,在Win32环境下,这类断点在Ring 3下形成异常,由Windows系统向调试器发送异常处理信息,调试器由此获得处理异常的优先权。然而,对于由虚拟机解释执行的伪代码,因为系统并未给程序开发人员特意留出标准的调试接口,异常的处理对用户而言也是透明的,传统的调试器原理便无法在此应用。
   明显地,WKTVBDebugger的作者Mr. Silver和Mr. Snow并没有就此止步,他们使用了一种类似于Hook的方法,把调试器代码插入到虚拟机和VB P-code伪代码之间,巧妙地解决了如何让调试器取得控制权的问题,这也就是我在本文开头谈到的具有启发意义的地方。大家应该还记得我曾介绍过的VB P-code虚拟机伪代码读取引擎:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 98745
活跃值: (201039)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持!!!
2004-12-26 12:41
0
雪    币: 690
活跃值: (1841)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
3
透彻,好文章。
2004-12-26 15:32
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
支持!!!
2004-12-26 16:40
0
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
5
cyclotron ,你的文笔太好了,从来没看到如此流畅的文章!
可花了你不少心血啊,谢谢.
2004-12-26 16:45
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
6
牛人,回头学习一下!
2004-12-26 18:12
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
7
辛苦  :D
2004-12-26 18:28
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
8
最初由 fly 发布
辛苦 :D


好久不见你来这个版喷水了  :D
2004-12-26 19:44
0
雪    币: 205
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
收藏了!知道什么叫牛人了!
2004-12-27 01:42
0
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
那么Native Code又该如何反编译呢?
2004-12-27 08:56
0
雪    币: 12474
活跃值: (4195)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢分享!
2004-12-27 09:16
0
雪    币: 549
活跃值: (2250)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
试用试用,还没搞过VB呢
2004-12-27 10:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢
2005-1-9 09:40
0
雪    币: 3305
活跃值: (2027)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
年代很久远了。
2012-5-31 10:25
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
谢谢楼主,学习了。
2012-5-31 11:16
0
雪    币: 1121
活跃值: (752)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
16
真能挖啊
2012-5-31 11:24
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hjm
17
学习,谢谢分享!
2012-6-23 21:49
0
游客
登录 | 注册 方可回帖
返回
//