如何找出DLL中正在调用哪些函数?

时间:2019-07-08 20:37:16

标签: c++ dll profiling

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

1 个答案:

答案 0 :(得分:0)

当您不知道函数原型及其参数时,这有点复杂。但是您尝试做一些小研究:

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

enter image description here

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