时间:2011-05-16 13:06:07

标签: debugging assembly vb6

我正在研究传统的VB6应用程序。在某个用例中,应用程序失败,看起来像一个空指针异常:

  

“0x2982e900”的指示   引用内存为“0x00000156”。该   记忆无法“读”。

我试过做一些源代码调试,但我找不到抛出异常的源代码行。有没有办法找到对应于汇编指令地址的源代码行,如0x2982e900? (我尝试过Reflector,但它似乎只支持.NET)。

更新

当我使用VB6 IDE调试器调试应用程序时,我在VB6源代码中没有任何中断。而是弹出上面提到的Windows错误消息,让我选择启用Visual Studio 2010调试器。如果我这样做,VS2010调试器会显示如下汇编代码:

  

[...]
  2982E8FA push eax
  2982E8FB拨打29832E9B
  2982E900 mov ax,word ptr   [EAX + 156H]
   [...]

该应用程序使用来自名为Infragistics的公司的一些.ocx文件来实现GUI。根据{{​​3}}实用程序,显示的汇编代码来自文件IGTOOLBARS40.OCX

2 个答案:

答案 0 :(得分:3)

与托管的.Net代码一样,VB6代码无法遇到无效的指针异常(因为VB6不包含指针)。

问题很可能是由

引起的
  • DLL或OCX中的错误(可能是第三方错误?)
  • 调用Windows API时出错。最常见的是通过Declare语句,有时通过类型库(hard-core!)。

第一步是确定哪一行VB6代码触发了崩溃。

或者:

  • 逐步执行IDE,直到崩溃发生。
  • 或者将0x2982e900地址解码为带有CrashFinder的VB6源代码行号。您始终使用包含PDB filedebug symbols构建您的EXE,对吗?

    要告诉VB6 IDE使用调试信息构建项目,您需要更改其中一个默认编译选项。从“文件”菜单中,选择“Build Project1.exe”。单击出现的保存文件对话框中的“选项”按钮,将打开属性表。切换到“编译”选项卡,并选中标记为“创建符号调试信息”的框。

Ensure that "Create Symbolic Debug Info" is checked in your build settings

答案 1 :(得分:1)

您可以尝试使用IDA Pro等反汇编程序对应用程序进行逆向工程。