如何在没有调试信息的情况下通过C ++代码低级调试COM DLL(Firefox插件)方法?

时间:2016-12-03 20:57:55

标签: dll com firefox-addon firefox-addon-sdk visual-studio-debugging

鉴于以下内容:

  • 一些旧的Firefox插件的32位DLL代码文件(即一个包含Typelib,XSD和XSL条目的DLL),没有源代码或调试信息,最初用C ++编写并用Visual Studio编译,
  • 此DLL中导出的函数/方法的名称和参数(Firefox插件的一个函数,可在JS代码中访问),
  • 在Windows 7上运行的Visual Studio Community 2013,
  • C ++开发经验,但不是COM或Firefox,
  • 调试英特尔汇编程序代码的经验
  • 代码许可证,不禁止反汇编DLL,

我想这样做:将DLL加载到某些C ++代码中,然后在CPU级别上执行函数代码以找出它的确切功能。

你能否告诉我从哪里开始以及如何完成这项工作?我想DLL可能需要一些特定于Firefox的初始化才能调用我想调试的函数。这可以用Firefox SDK完成,没有DLL的源代码和调试信息吗?或者我可以成功地"赤裸裸地"加载DLL,找到 - 相当简单 - 功能(如何?)的入口点并调用它?

感谢任何提示。

1 个答案:

答案 0 :(得分:0)

如果没有pdb文件或源代码,则很难调试dll文件,因为调试器从PDB文件加载调试信息并使用它来查找符号或关联程序源代码的当前执行状态。 Visual Studio使用PDB文件作为主要文件格式,以便在调试期间调试信息。如果没有这些文件,则无法调试该库。

更新

我们使用LoadLibrary()函数动态地将dll加载到一个项目,但是如果要进入dll文件,它确实需要pdb文件。一个简单的示例是您可以创建一个pdb文件并将其放在与一个简单的自定义dll库项目相同的文件夹中。我认为Visual Studio会自动搜索目录并加载它们,您可以在Debug模块窗口中找到相关信息。

以下情况与您的问题不同,但它也告诉我们,如果dll文件真的被一个项目/进程调用,它会加载pdb文件:

Does winbase::LoadLibrary() load .pdbs?