c++ - 如何找出在 DLL 中调用了哪些函数?

标签 c++ dll profiling

我有一个使用 CameraSDK.dll 的 CamerSampleSDK.exe C++ 应用程序。由于未知原因,公司决定不向所有购买相机的用户提供 CamerSampleSDK.exe 源代码。主要问题是有可能以某种方式找出 CameraSDK.dll 应用程序 CamerSampleSDK.exe 正在调用哪些函数?在这种情况下可以使用哪个应用程序?

最佳答案

当您不知道函数原型(prototype)和它们的参数时,这会有点复杂。但是你尝试做一个小的研究:

  1. 查找您的 DLL 正在导出的所有函数名称(您的目标是 DLL 导出表)。您可以使用“PE 工具”应用程序:在 PE 编辑器中打开您的 DLL,“目录”->“导出目录”。您将看到函数名称及其地址:

enter image description here

  1. 如果你能使用 IDA Pro,那将是更好的解决方案。尝试反汇编您的 DLL,探索每个导出的函数并通过反编译代码推断参数类型和结果。在研究中这是比较复杂的事情,你需要汇编程序、系统架构师和机器代码的知识。
  2. 如果您熟悉 WinDBG、OllyDBG 或其他 Windows 用户模式调试器等调试器,请尝试调试使用 DLL 的应用程序:在每个 DLL 导出函数上放置断点。检查推导的签名是否正确并找到正确的调用顺序
  3. 尝试在您的项目中使用带有 LoadLibrary/GetProcAddress 的 DLL,并对应推导的参数和调用顺序。

关于c++ - 如何找出在 DLL 中调用了哪些函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942253/

相关文章:

c++ - 将十进制转换为任何基数?

c++ - 当值变得很小时,为什么这些计算需要多 20 倍的时间

performance - 向量化三个 for 循环

tensorflow - 如何读取tensorflow摘要回调生成的 "local.trace"文件?

haskell - 分析 Haskell 代码但不包括库分析信息

c++ - Armadillo 元素明智的乘法速度

c++ - 我应该在一个函数被调用的次数非常多的情况下使用它吗?

将 C 头文件转换为 delphi

c++ - COM 初始化和在 Win32 C++ DLL 中的使用

c - 根据其内容从双向链表中删除结构(C 语言)