从托管代码中的非托管代码中调用函数时访问访问空缺

时间:2019-04-02 13:41:20

标签: exception memory dll unmanaged

当我从托管代码中调用非托管DLL中的foo()时,抛出了访问冲突(0xC0000005)异常。

在foo()中有一个内存分配,即calloc()。 我知道该异常与对calloc()的调用有关,因为该日志仅在此调用之前消失,并且我通过__except()捕获了异常0XC0000005。

一件特别的事是: 如您在下图中所看到的,我通过spy.dll中的包装器调用foo(),该包装器由tool.exe注入到app.exe中。这样调用foo(),执行calloc()时出现访问冲突。

顺便说一句,我通过CreateRemoteThread()注入了spy.dll。

但是,如果我从最初由app.exe加载的另一个DLL(com.dll)中调用相同的foo(),则一切正常。

diagram

我违反了哪些规则?

是我要做的事情完全错误,还是可以通过一些小的修改就可以实现我想要的?

0 个答案:

没有答案