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

Debugging 调用本机C DLL时尝试读取或写入受保护内存,debugging,winapi,dll,reverse-engineering,Debugging,Winapi,Dll,Reverse Engineering,我有一个本机的C dll,除了DllEntryPoint,它还导出一个函数FuncX。我试图找出FuncX是如何与其调用者通信的,因为它有一个void返回类型,并且没有参数。当我从C#线束调用它时,我得到一个AccessViolationException——试图读取或写入受保护的内存 我有一种预感,它的客户端应用程序可能会分配一个缓冲区,用于从dll发送或接收值。这是正确的预感吗 我无法调试客户端应用程序,因为由于某些原因,它无法运行,因此无法启动它并附加到进程。但是,我可以在IDA Pro中

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

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


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

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

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


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

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


旁注:这真是太棒了。

我只在IDA Pro 300页教程的第20页左右,已经订购了一本600页的书,但是现在,我如何在IDA Pro中加载DLL,并且仍然从C#调用它呢?我正在查看反编译器插件,谢谢。哎哟,我的眼睛看到了反编译器的价格。以目前的汇率,这是我的房子付款的三倍!如果我有更多的逆向工程工作,这可能是一笔值得的投资。我不知道,我自己从来没有做过很多。只在我以前的工作中见过。但是当您遇到崩溃时,请查看AccessViolationException,看看是否可以找到内存地址。我知道你可以直接跳转到内存地址,看看里面有什么。也许这会让你开始。