调用本机C DLL时尝试读取或写入受保护的内存

时间:2009-02-24 18:53:09

标签: debugging winapi dll reverse-engineering

我有一个原生的C dll,除了DllEntryPoint,FuncX之外还可以导出一个函数。我试图找出FuncX如何与它的调用者通信,因为它有一个void返回类型,没有参数。当我从C#线束调用它时,我得到一个AccessViolationException - 尝试读取或写入受保护的内存。

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

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

2 个答案:

答案 0 :(得分:1)

如果有问题的DLL有任何静态或全局符号,则所有通信都可能通过这些符号完成。你有任何看起来可能会这样做的API代码吗?

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

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

答案 1 :(得分:0)

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

旁注:Decompiler plugin非常棒。