代码之家  ›  专栏  ›  技术社区  ›  drharris

在C++ DLL中查找外部调用

  •  3
  • drharris  · 技术社区  · 14 年前

    我们目前使用一个硬件驱动程序的动态链接库来连接特定的硬件。但是,我们还有一个在2002年左右用VC++编写的旧的内部开发的DLL,它为一些核心函数包装了该DLL。这个代码已经丢失很久了,在我出现之前就已经开发好了。因此,在发生故障的情况下,它无法被支持,甚至无法被查看。我们正试图通过直接从C#.NET应用程序访问驱动程序来减少中间人。

    我知道这个DLL只是包装了硬件供应商的DLL,但是方法签名并不相等。它看起来像是在单个方法中调用多个驱动程序函数。我的问题是:如何才能查看这个包装器DLL对这个特定函数的驱动程序DLL的所有外部调用?我不关心任何其他代码;我很确定如果我能弄清楚它打给司机的电话我就能推断出来。

    编辑:一个更简洁的解释(那是编造的)。。。

    驱动程序.dll 有一个函数 StartAcquisition(int, string) . 它还具有多种设置功能。

    有一个函数 StartAcquisition(int, string, double, int) .

    包装器.dll 正在呼叫 StartAcquisition(int,字符串)

    4 回复  |  直到 14 年前
        1
  •  2
  •   Eric    14 年前

    我认为 PE.Explorer might help you

    即使它没有直接列出它,您仍然可以得到分解并检查导入表映射。也许把这个工具和另一个类似的工具配对 Windbg OllyDbg 你可能会得到有趣的结果。

    任何能帮助你的工具都必须处理分解。在当前的可移植可执行格式(PE)中,有用于导入/导出的显式部分。要用代码映射这些表需要某种解释,这就是为什么我不认为有一种工具可以直接进行映射。

        2
  •  1
  •   Peter Cardona    14 年前

    你可以试试像艾达专业反汇编( http://www.hex-rays.com/idapro/ ).

        3
  •  0
  •   luiscolorado    14 年前

    看起来您必须构建自己的小实用程序来查找和反汇编现有程序,然后使用您喜爱的实用程序来扫描输出文本并搜索您的调用。我希望您不必这样做,但这可能比找到一个已经做到这一点的实用程序要快。

        4
  •  0
  •   ssegvic    14 年前

    如果您有权访问供应商DLL的接口,您可以构建自己的模拟替换库并将其放入路径中,以便遗留DLL使用它。