向某个应用程序中注入了DLL,DLL中定义了一些函数,一些变量,DLL注入后没有执行任何函数,为什么应用程序退出时,出现0x7c9318d0指令引用的0xxxxxxxxx内存不能为writen的错误呢?

解决方案 »

  1.   

    不用DLL会不会有问题?而且DLL加载后要释放的
      

  2.   

    这个问题要看你驻入 DLL 使用的方法,以及被驻入 DLL 中的实现,你这里说明不太清楚,无法确切的给你找出错误,不过你可以考虑以下以下几点:
        1. 被驻入 Dll 中可能出现的问题
        1.1 驻入 Dll 后,可能会自动执行 Dll 中的 DllMain 函数以及全局变量的初始化操作,如果这些操作的操作不当,则可能出现错误。
        1.2 被驻入 Dll 的进程退出时会执行被驻入的 Dll 中的 DllMain 函数,应该在 DLL_PROCESS_DETACH 项或 DLL_THREAD_DETACH 中填写释放操作,如果在 Dll 的驻入过程中或者 DllMain 的 DLL_PROCESS_ATTACH 或 DLL_THREAD_ATTACH 项中又或者 全局变量的初始化中写了一些代码,而在 DLL_PROCESS_DETACH 项或 DLL_THREAD_DETACH 中不将占据的资源释放,则会出错。
        2. 驻入方法错误
        Dll 驻入的方法很多,常见的有:
        2.1 使用 SetWindowsHook 或 SetWindowsHookEx 驻入
        使用 SetWindowsHook 或 SetWindowsHookEx 驻入的时候有个问题需要注意,这种方法中可能会同时在我们的 Hook 安装程序以及被驻入的目标程序中使用将驻入的 Dll,这时的一个问题是,我们的安装程序如果修改了将驻入目标程序的 Dll 中的数据,这些数据是不会影响到目标程序中的 Dll 中的数据的,因为在 Windows NT 以后的系统(比如 Windows xp)将为每个程序提供一个 Dll 映像,如果要实现在一个程序中修改另外一个程序中的 Dll 中的数据,则需要使用 Dll 共享数据段技术。
        2.2 使用 CreateRemoteThread 函数驻入
        这种驻入我没使用过,不太了解,如果你使用的是这种方法,我无能为力,你可以去查询以下 MSDN。
        2.3 使用 ReadProcessMemory、WriteProcessMemory 函数配合虚拟存储技术实现驻入
        这种技术难度太大,需要对 PE 可执行文件的结构比较了解,并且对 Windows 的虚拟存储技术及相关 API 都比较熟悉,因为难度大,出错的机会也多,这里不做详细介绍了,有兴趣的话可以查看 MSDN 以及网络上的一些文章。
        总结:你可以贴一部分代码出来,这样大家才好有的放矢。