Windows的DLL全局共享变量
同一个DLL文件可以被多个进程加载。当不同的进程将DLL映射到自己的内存空间时,系统会为DLL中的全局和静态变量创建不同的实例,而不会共享同一个变量实例。 那我们如何实现在进程间共享DLL全局变量呢?我们可以在DLL中使用如下语句来创建一个段,用来存...
同一个DLL文件可以被多个进程加载。当不同的进程将DLL映射到自己的内存空间时,系统会为DLL中的全局和静态变量创建不同的实例,而不会共享同一个变量实例。 那我们如何实现在进程间共享DLL全局变量呢?我们可以在DLL中使用如下语句来创建一个段,用来存...
一、注册表方式1.1 注入方法如题,通过注册表的方式来实现 DLL 注入,我们只需要针对特定的注册表项进行修改即可,有一点需要注意的是:如果被注入的进程是 64 位进程,则注入的 DLL 也需要是 64 位的。同理,注入到 32 位的进程也需要是 32 位的 DLL。 另外,根据被注入目标进程的位数(32 或 64)不同,注册表的位置也不同。
一、注入技术的用途从Windows内存体系(1)--虚拟地址空间文章中我们可以知道: 在 Windows 系统中,每个进程都有自己私有的地址空间。当我们用指针来引用内存时,指针的值表示的是进程自己的地址空间的一个虚拟的内存地址。进程不能通过指针来引用其他进程地址空间的内存。 这种设计提升了操作系统的健壮性和安全性,比如一个进程存在缺陷,可能会引用和覆盖随机地址处的内存数据,那么我们就不用担心这个缺陷会影响到操作系统及其他进程。 独立的地址空间有利于系统的稳定性。但也带来了诸多不便,下面列举了需要跨越进程的边界来访问另一个进程地址空间的情况: 我们要从另一个进程创建的窗口来派生子类窗口,比如附着在 Windows 资源管理器上的一些小插件等。 我们需要假借其他进程之名做某些事情。 我们需要获取其他进程的更多详细信息,如加载了哪些 dll 等。 我们需要对其他进程的某些函数进行HOOK。 以及干一些羞羞的事情… 为了满足上述需求,我们可以使用 DLL 注入的技术,将我们自己开发的 DLL 注入到另一个进程的地址空间中,这样 DLL 中的代码就可以在该进程地址空间中执行。