社区
进程/线程/DLL
帖子详情
关于同一进程内同一个dll的多个副本的问题
myseemydog
2016-01-28 02:12:38
场景是这样的。开发了一个activex的dll,被IE浏览器进程加载。同一个网页上有多个object标签。所以这个dll实例会被IE初始化多次。
现在有一个文件配置。想做成所有dll的实例共用一份。有没有什么办法可以做到。
欢迎大家反馈!
...全文
184
2
打赏
收藏
关于同一进程内同一个dll的多个副本的问题
场景是这样的。开发了一个activex的dll,被IE浏览器进程加载。同一个网页上有多个object标签。所以这个dll实例会被IE初始化多次。 现在有一个文件配置。想做成所有dll的实例共用一份。有没有什么办法可以做到。 欢迎大家反馈!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
oyljerry
2016-01-30
打赏
举报
回复
都是读取的同一份配置文件,这样多次加载也是相同的配置数据。没什么问题啊
Yofoo
2016-01-28
打赏
举报
回复
dll应该没有多个副本吧 有多个object标签, 这个应该是class有多个实例 修改对象的createinstance函数, 直接返回以前创建的实例, 注意增加引用计数
【新】易语言异常捕获,基于东灿大佬的异常捕获模块5-2版本-易语言
前言 本程序基于东灿的异常调试模块5.2部分版权信息如下: 1. 该模块功能是补足易错误管理器无法捕捉的异常。 2. 本模块可以截获许多异常,比如内存读写错误,非法汇编指令,算术异常,其他异常等等。 3. 本模块拥有try/catch的异常处理模型,支持多层嵌套,支持向上处理。允许用户自己设定跳过致命异常。 4. 并且支持易原错误管理器接管 5. 建议配合配套工具使用更加好用 正文: 程序原使用模块: 模块名 作者或工作室 用处 高级ApiHookEx 作者未知 HookApi,在模块中用于Hook:CreateRemoteThreadEx和CreateRemoteThread AppThreadVar 作者未知
进程
内变量,线程内变量。可以在任意ec模块,任意
DLL
内调用,全部共享 callstack 作者未知 函数调用堆栈跟踪。 disasm 作者未知 支持MMX/SSE/SSE2/SSE3/3DNow取CPU指令长度 GetThisModuleHandle 作者未知 取出当前ModuleHandle e-try/catch(即new_SEH) 星锋工作室-东灿 SEH结构体等 精简内容 简化模块(即多模块合一,但互相不影响,并且删去了重复的API,数据类型等) 增加注释:对于代码,追加了更多的注释。 部分原理理解(很多都是本人自己的理解,可能不对,若有错误,欢迎指出):AppThreadVar:工作核心:tls线程局部存储(缩写为TLS。
进程
中的全局变量与函数内定义的静态(static)变量,是各个线程都可以访问的共享变量。在一个线程修改的内存内容,对所有线程都生效。这是一个优点也是一个缺点。说它是优点,线程的数据交换变得非常快捷。说它是缺点,一个线程死掉了,其它线程也性命不保;
多个
线程访问共享数据,需要昂贵的同步开销,也容易造成同步相关的BUG。) 部分功能:它主要是为了避免
多个
线程同时访存
同一
全局变量或者静态变量时所导致的冲突,尤其是
多个
线程同时需要修改这一变量时。为了解决这个
问题
,我们可以通过TLS机制,为每一个使用该全局变量的线程都提供一个变量值的
副本
,每一个线程均可以独立地改变自己的
副本
,而不会和其它线程的
副本
冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。而从全局变量的角度上来看,就好像一个全局变量被克隆成了多份
副本
,而每一份
副本
都可以被一个线程独立地改变。 用途:动态TLS和静态TLS这两项技术在创建
DLL
的时候更加有用,这是因为
DLL
通常并不知道它们被链接到的应用程序的结构是什么样的。1. 如果应用程序高度依赖全局变量或静态变量,那么TLS可以成为我们的救生符。因而最好在开发中最大限度地减少对此类变量的使用,更多的依赖于自动变量(栈上的变量)和通过函数参数传入的数据,因为栈上的变量始终都是与某个特定的线程相关联的。如果不使用此类变量,那么就可以避免使用TLS。2. 但是在编写应用程序时,我们一般都知道自己要创建多少线程,自己会如何使用这些线程,然后我们就可以设计一些替代方案来为每个线程关联数据,或者设计得好一点的话,可以使用基于栈的方法(局部变量)来为每个线程关联数据 TLS分动态和静态,AppThreadVar我认为是动态TLS(调用了TlsAlloc函数) 相当于静态变量(我也只能理解到这里了) ApiHookEx和大部分的APIHook工作原理类似 e-try/catch说实话,这个模块我几乎不能理解原理(能理解的基本上是一些Api,比如MiniDumpWriteDump) 这个可能也是用于捕获异常,而且比较神奇的是,这个捕获到异常以后不会导致程序的退出,而是程序能够正常运行! 可以抛出自定义数值异常,由catch_int/catch_eq_int接收 可以抛出最后一次异常,让上层错误处理器处理 部分实例: try/catch测试:try/catch结果: 部分崩溃代码测试: 结果部分: 程序可以自己写出DMP文件: 更多功能请自己测试!!
关于
同一
个
dll
被
多个
进程
加载的共享
问题
每个
进程
加载
DLL
的时候都会将该
DLL
加载到自身
进程
的地址空间中,只有定义在共享段中的一些简单的类型可以。每个
进程
使用的不是
同一
个
副本
,映射到了不同的地址空间上。
进程
间通信(1)
dll
实现
进程
的内存共享
1. 两个
进程
访问
同一
个
dll
2.写入时复制(CopyOnWrite,简称COW)思想 如果有
多个
调用者(Callers)同时访问相同的资源(如内存或者是磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者修改资源内容时,系统才会真正复制一份专用
副本
(private copy)给该调用者, 只有更新操作,才会去复制一份新的数据并更新替换,否则都是访问
同一
个
资源。 3.1
dll
: #pragma data_seg("MySec") int nDate = 0; #pragma da
Windows IPC机制:
DLL
文件中的全局变量共享
默认情况下,每个
进程
加载的
DLL
会在其独立的内存空间中创建全局变量的
副本
,这导致了全局变量在不同
进程
之间的数据不一致性。但是,通过一些特定的技术手段,我们可以实现
DLL
文件中全局变量的共享,使得
多个
进程
可以访问和修改
同一
个
全局变量的值。需要注意的是,虽然
DLL
文件可以实现全局变量的共享,但同时也带来了一些
问题
。通过合理设计和使用
DLL
文件,可以实现全局变量的共享,从而满足不同
进程
之间的数据通信和共享需求。不同
进程
加载
同一
个
DLL
文件时,它们都会共享
同一
个
全局变量的内存空间,从而实现了跨
进程
的数据共享。
有关
DLL
的几个
问题
一、
DLL
被
多个
进程
调用
问题
Win32系统会确保内存中只有一个该
DLL
的拷贝,这是通过内存映射文件来实现的。不同的
进程
分别将这份
DLL
的代码段地址映射到自己的
进程
空间中,同时不同的
进程
在自己的
进程
空间分别有各自的一份该
DLL
的数据段拷贝。 这是因为,在Win32环境中,每个
进程
都有了它自己的地址空间,
DLL
函数中的代码所创建的任何对象(包括变量)都归调用它的
进程
所有。当
进程
在载入
DLL
时,操
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章