我有一个包含四个函数的 DLL 文件,我需要访问这四个函数,但它们没有名称,只有我知道的入口点。我必须弄清楚这四个函数的作用。问题是,如何在 C#(.Net) 中调用这些未知函数?我怎样才能弄清楚它们的参数和返回值是什么?DLL 是Sndvolsso.DLL
. 它的功能在互联网上无处可寻。(除非你能找到它们)如果有人知道我可以用来读取参数和返回值的工具,那将非常有帮助。
问问题
388 次
3 回答
2
如果您的 DLL 未管理:-
使用IDA
- 反汇编dll,找到导出的函数。
- 双击该函数,其声明将显示在 IDA 中。
IDA 中 user32.dll 的 MessageBoxA 示例:-
.text:77D6EA11
.text:77D6EA11 ; int __stdcall MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
.text:77D6EA11
于 2012-09-05T15:41:29.543 回答
2
您还可以使用IDA 5.0的免费版本。
于 2012-09-05T15:46:16.780 回答
0
参数/类型/签名信息不存储在非托管 DLL 文件中。您可以使用LoadLibrary
andGetProcAddress
和使用 ordinal 获取每个导出函数的地址。但你得到的只是地址;由您决定如何正确调用函数。
它将帮助您了解函数在二进制/机器代码级别的工作方式以及堆栈的工作方式。
以下是您的选择:
- 正如您所说,从互联网等外部资源中查找信息。
- 如果你能找到 PDB 文件,这就是调试信息文件,它是调试器如何知道如何将内存中的位置与代码行相关联的方式。它将包含您要查找的所有元数据。但是在您的情况下,我认为您无权访问它。
- 如果您对汇编和理解二进制级别的可执行代码感到满意,请反汇编或调试 DLL。看看它期待什么,它如何使用堆栈。
否则你将不得不妥协:
- 使用不同的库。最实用,因为老实说,如果你对此一无所知,
sndvolsso.dll
那么即使你让它“工作”,一旦出现任何问题,你也会迷失方向。 - 雇用可以做到这一点的人。
- 只需编写自己的代码,而不是使用这个。
但是仔细想想,你的问题并没有真正的意义。如果你不知道这些功能是什么,你怎么知道你需要它们?
于 2012-09-05T15:34:19.953 回答