当我从托管代码中调用非托管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(),则一切正常。
我违反了哪些规则?
是我要做的事情完全错误,还是可以通过一些小的修改就可以实现我想要的?