0

我有一个本机 C dll,它导出除 DllEntryPoint、FuncX 之外的一个函数。我试图找出 FuncX 如何与它的调用者通信,因为它有一个 void 返回类型并且没有参数。当我从 C# 工具调用它时,我得到一个 AccessViolationException - 试图读取或写入受保护的内存。

我有一种预感,它的客户端应用程序可能会分配一个缓冲区来发送或接收来自 dll 的值。这是一个有效的预感吗?

我无法调试客户端应用程序,因为由于某种原因它没有运行,所以我无法启动它并附加到进程。但是,我可以在 IDA Pro 中对其进行反汇编,但如果可以的话,我不知道如何尝试在其中调试它。

4

2 回答 2

1

如果有问题的 DLL 有任何静态或全局符号,则所有通信都可能通过这些符号完成。您是否有任何看起来可能正在执行此操作的 API 代码?

DLL 不太可能使用客户端提供的缓冲区,因为客户端和服务器都需要知道该缓冲区的基地址,并且您不能在调用时向 calloc 或 malloc 询问“首选”地址。

您也可以尝试运行link /dump /symbols并将其指向您的 DLL。这将向您显示 DLL 中导出的符号列表。祝你好运!

于 2009-02-24T19:09:48.030 回答
0

我会尝试将 DLL 本身加载到 IDA Pro 中。希望 C# 保留本机调用堆栈,您可以查看 DLL 崩溃的代码。

旁注:反编译器插件非常棒。

于 2009-02-24T20:52:45.003 回答