读取Dll参数

时间:2012-09-05 15:26:50

标签: c# windows dll

我有一个包含四个函数的DLL文件,我需要访问这四个函数,但它们没有名称,只是我知道的入口点。我必须弄清楚这四个功能的作用。 问题是,如何在C#(。Net)中调用这些未知函数?我怎样才能弄清楚他们的参数和返回值是什么? DLL是Sndvolsso.DLL。它的功能在互联网上无处可去。(除非你能找到它们)如果有人知道我可以用来读取参数和返回值的工具,那将非常有帮助。

3 个答案:

答案 0 :(得分:2)

如果你的DLL是无人值守的: -

使用IDA

  1. 反汇编dll并找到导出的函数。
  2. 双击该功能,其声明将显示在IDA中。
  3. IDA中user32.dll的MessageBoxA示例: -

    .text:77D6EA11
    .text:77D6EA11 ; int __stdcall MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
    .text:77D6EA11       
    

答案 1 :(得分:2)

您还可以使用免费版IDA 5.0

答案 2 :(得分:0)

参数/类型/签名信息不存储在非托管DLL文件中。您可以使用LoadLibraryGetProcAddress以及使用序数来获取每个导出函数的地址。但你得到的只是地址;你应该知道如何恰当地调用这些函数。

它将帮助您了解函数在二进制/机器代码级别的工作方式以及堆栈的工作方式。

以下是您的选择:

  1. 正如您所说,从互联网等外部来源寻找信息。
  2. 如果您可以找到PDB文件,这是调试信息文件,调试人员知道如何将内存中的位置与代码行相关联。它将包含您要查找的所有元数据。但在你的场景中,我认为你无法访问它。
  3. 如果您对组装和理解二进制级别的可执行代码感到满意,请反汇编或调试DLL。看看它的期望,它如何使用堆栈。
  4. 否则你将不得不妥协:

    1. 使用其他库。最实际的,因为老实说如果你不知道关于这个sndvolsso.dll 的任何,那么即使你让它“正常”,一旦出现任何问题你就会迷失方向。
    2. 雇用能够做到这一点的人。
    3. 只需编写自己的代码,而不是使用此代码。
    4. 但是想想看,你的问题确实没有意义。如果你不知道这些功能是什么,你怎么知道你需要它们?