P-Code简介 术语P-Code既不是一个新名词也不是Microsoft的发明,P-Code只是简单地被解释执行的伪指令,

MSVBVM50.DLL MSVBVM60.DLL

文件名称清晰的表明是Microsoft Visual Basic 虚拟机(Virtual Machine), 后跟不同的版本信息。两个版本的差异不大:版本6引入了一些新的指令,并采用了更直观的命名来标注某些版本5中的指令。换句话说,版本6只是改变了版本5中部分指令名称,而非其内在的功能。 虚拟机不仅解释Visual Basic 的P-Code文件,同时它也被用于执行编译过的机器码。这是因为VB 虚拟机(DLL文件)同时也包含所有VB程序要调用的API。 一个例子是rtcMsgBox, 这是个等价于标准Windows API MessageBox 的VB函数。P-Code代码被VB虚拟机解释执行,VB中所有的函数都是以这种间接的方式被提供的。 由于这个原因,当我们跟踪一个Windows API MessageBox被 P-Code程序时,产生了一个严重的问题:我们必须要跟踪P-Code伪指令。 SoftICE 无法跟踪P-Code伪指令, 它只能跟踪VB虚拟机的执行过程。更明确地说, SoftICE 只能理解CPU处理器的机器码,它不能理解任何伪指令。我们将尝试去跟踪P-Code(P-Code伪指令将被转换成可被我们的CPU理解和执行的机器码)。 起始表(Beginning of the Tale)

几乎所有的事情都是如此:好奇心引发了人们迎接一项新的挑战,我们的故事由此开始。 我记得曾在EFNet网站(论坛)与Green先生讨论有关VB P-Code的问题。他那时的工作正好涉及有关VB5编译的应用程序。他告诉我处理P-Code是非常的困难,所以我们有了制作一个VB P-Code的Debugger程序的想法。 实际上Black先生也认为这是个有意义的思路。考虑到这个项目,我说如果我们没有任何可用的有关资源,这可不容易实现。而后,我们查找了许多有关信息,但没有任何有意义的发现,空手而归,教你如何制作VB的PCode调试器》(https://www.unjs.com)。好奇心使得我更加努力去细心地发掘有用的信息资料。的确是不易呀…我曾和Snow先生探讨有关问题,他提供给我一个被Lazarus修改过的 MSVBVM50, 在其中,他描述了VB程序表现的所有可能的串比较。这促使我下决心制作一个VB Debugger。 我认为当MSVBVM50运行时注入代码是可能的。被注入的代码能够调用我的Debugger, 它在一个DLL中实现。 我决定告诉已加入这个项目的Snow先生, 由他负责制作代码注入器 (好像一个调用装入器Loader) ,我负责Debugger (DLL)编码,就是那个被装入的Debugger(DLL) 。 就在我们两个完成了一些工作后,我们进行了测试,令人振奋的是它真的可以工作!这个 Debugger项目已经迈出了它的第一步。 我们可以控制VB虚拟机(截获有关操作),并且在虚拟机与VB应用程序之间安置我们的Debugger。最大的问题已经得到解决,虽然在初始阶段,我们采用的解决方案(技术上如你所见)并不是最终我们采用的方法。在我们的大目标和指导思想始终如一的情况下,我们不断对它进行改进,一直到我们完全避免了对虚拟机本身的修改。 * 第一步 跟踪分析,控制虚拟机 为使我们的Debugger能够工作,有一个关键性必须解决的问题:发现P-Code代码的翻译转换是什么时候以及如何发生的。一旦我们认识到这一点,我们注入的代码将接管对被调试的VB应用程序的控制,并且发送有关数据到我们的Debugger。Debugger 依次处理操作码并返回到VB 虚拟机。 我本人以前在有关调试器Debugger编码方面的经验几乎为零。不过不久前我差不多完成了一个x86的反汇编器 , 因此我将那些知识用于我的VB Debugger 开发工作。我的构思是这样的: 对于反汇编/解释这部分代码包含以下基本原理: - 一个指针(pointer)指向一个缓存区(buffer),它包含将被转换的数据。

- 一个控制程序,它从缓存区中读取操作指令(opcodes)并且重定向程序流,使其依据我们的意图,指向我们想要它执行的程序位置。 这个任务通常表现为两种形式: 1、一系列控制描述语句(对于每一个操作码);2、使用一个地址跳转表。 我放弃了第一种选择。因为P-Code中各不相同的操作码实在太多,这将需要一个巨大的条件控制结构(处理这样的工作将变成世界上最慢的事情)。 我猜VB虚拟机对P-Code的翻译转换过程采用的是地址跳转表方法去解释那些可能的操作代码。 这种做法同样出现在我设计的反汇编器中。 现在,我必须完成以下的工作: - 定位缓存区中待解释的操作码,定位跳转地址表 我设计并且编译了一个小VB应用程序: Private Sub Form_Load() MsgBox "Hello this is P-Code!!!", VBInformation, "Example" End Sub 我通过SoftICE的符号载入器(symbol loader)调入MSVBVM60.DLL (VB6虚拟机) ,设置BPX on _rtcMsgBox。 当SoftICE 中断时,我按 F12返回调用 _rtcMsgBox 的代码: call eax  // 调用 rtcMsgBox

cmp edi,esp  // 我们在此

jnz 66105595  // 检查堆栈指针

xor eax,eax  // 准备寄存器 eax 去调用缓存区中的下一个操作码

mov al,[ESI]  // 在al中装入待执行的操作码, 上面的演示中,它是36h

inc ESI  // 增加指针偏移量(在 ESI 寄存器中)

jmp [eax*4 660FDA58]  // 跳转到解释伪指令操作码 36h 的处理程序

vb计算机怎么制作,教你如何制作VB的PCode调试器 -电脑资料相关推荐

  1. php如果实现日历的制作,教你如何制作一个简单的PHP日历

    PHP是一款功能强大的后端编程软件,我们在学习PHP的过程中要经过很多实际的战斗,现在让我们做一个日历来巩固PHP的基础,今天爱站技术频道小编为大家整理了教你如何制作一个简单的PHP日历,希望能帮到大 ...

  2. 计算机中常见的英语错误提示,BIOS出错英文提示信息大全 -电脑资料

    BIOS出错英文提示信息大全 -电脑资料 时间:2019-01-01 [www.unjs.com - 电脑资料] 第二电脑网收集的BIOS出错英文提示信息大全,对硬件出错的判断非常有用 Drive A ...

  3. 计算机目录的制作步骤,PPT的目录设计的几种方法 -电脑资料

    PPT可以有目录,也可以没有目录, 一.常规设计:添加背景,这是被最常用的手法.背景最好跟目录有一定联系,书本,黑板,笔记簿等等. 二.图标法.在每一标题前添加图标,要注意的是图标必须符合标题的内容, ...

  4. 计算机ps特效教程,Ps动画教程:逼真小溪潺潺流水动态效果... -电脑资料

    Photoshop动画教程,制作小溪潺潺流水效果,逼真漂亮, 本例介绍运用PS打造小溪潺潺流水动态效果,教程详细介绍了如何将一幅静态风景图变成逼真的流水动态效果,希望朋友们喜欢~~ 一.效果 效果图 ...

  5. mysql数据库电脑配置_教你怎样正确配置MySQL数据库SQL Mail -电脑资料

    本文用个人经历来讲解SQL Mail的配置与使用, 用SQL Mail主要是要完成这样的功能: >用户在网上注册后,系统将随机产生的密码发送到用户登记的Email. >用户在论坛的帖子有回 ...

  6. win8恢复我的计算机较早时间点,Win8系统的重置和刷新功能 -电脑资料

    Windows8重置电脑的步骤如下: 1. 电脑开机进入Windows Recovery Environment (Windows RE) 2. Windows RE擦除和格式化硬盘分区商店额Wind ...

  7. 肉鸡进程linux,教菜鸟如何获得大量Linux肉鸡网站安全 -电脑资料

    适合读者:入侵爱好者.普通Linux网民 前置知识:Linux基本操作 投向Linux肉鸡的怀抱 文/图 密界寻踪 很多菜鸟都在重复的玩3389肉鸡,时间长了自然就腻味了,非常梦想得到自己的Linux ...

  8. excel 宏 加1的计算机,巧用宏命令来为Excel工作表公式加密码 -电脑资料

    工作表中很多数据都是由公式计算生成的,那么如何让别人只看到计算的结果,而将使用的公式隐藏起来呢?今天我们就向大家介绍使用宏来解决这一问题, 一.创建宏 启动Excel,依次选择"工具&quo ...

  9. excel表格从某个标志计算机,让Excel也玩多标签 多个图表一个窗口 -电脑资料

    很多用户习惯了傲游.火狐浏览器的多标签浏览功能,希望能够在文档.窗口中也均能实现,将多个程序以标签的形式显示在同一窗口之中, 软件安装(如图1)和使用方法非常简单,安装后,用户点击Excel表格,并同 ...

最新文章

  1. MySQL数据库服务器逐渐变慢 该如何分析与解决
  2. Shell 脚本修改 Mac IP地址
  3. ListView隐藏HeadView
  4. C之memset、memcpy、strcpy、strncpy区别
  5. 一个人动情之后的表现......
  6. 产品经理学技术之数据结构
  7. Python 中的 10 个常见安全漏洞,以及如何避免(上)
  8. 在c#中用mutex类实现线程的互斥_C# 多线程系列(4)进程同步Mutex类
  9. 奇怪的比赛--蓝桥杯
  10. 不爱跳槽、月薪集中在 8K-17k、五成欲晋升为技术Leader|揭晓中国开发者真实现状
  11. 使用Electron和Microsoft Bot Framework制作Skype Bot
  12. 充电速度公式_锂电充电时间计算公式
  13. 2023中国眼博会/护眼仪/CEYEE青少年眼健康产业展览会
  14. OpenCV 5种图像滤波辨析:方框、均值、高斯、中值、双边
  15. android 高德静态地图api,静态地图-API文档-开发指南-Web服务 API | 高德地图API
  16. Python:数据降序排列索引
  17. Brytenwalda
  18. 快速掌握Charles抓包工具 [MP4] (115M)
  19. 二、浙江专升本高等数学考点-极限
  20. 京东CPS商品推广接入流程

热门文章

  1. 24微信小程序开发2
  2. Visual Graph常见问题回答(FAQ)
  3. ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
  4. conda安装tensorflow2.x和pytorch1.8.0的一些常用命令
  5. 五路循迹传感器的优点_对于安装五路循迹传感器的机器人来说,如果五个传感器都遇到黑线,说明机器人的状态是()。...
  6. 芮城县县名由来 芮伯庙 古魏城 芮伯万 永乐县
  7. 免费的在线Web文件管理器:Net2FTP,Pydio,eXtplorer,KodExplorer–功能强大
  8. 探索sklearn的数据集——以红酒数据集为例
  9. 判断图有无环_数读湾区经济潜能:基于大数据分析的环杭州湾大湾区“一体化”发展潜能!...
  10. python人工智能方向面试准备_关于机器学习面试的经典题目(面试经验和建议)...