全局数据和静态数据不能被同一个. exe或DLL文件的多个映像共享,这是个安全的默认设置。但是,在某些情况下,让一个. exe文件的多个映像共享一个变量的实例是非常有用和方便的.

每个. exe或DLL文件的映像都由许多节组成。按照规定,每个标准节的名字均以圆点开头。

每一节都拥有与其相关的一组属性

exe或DLL文件各节的属性

属性

含义

READ

该节中的字节可以读取

WRITE

该节中的字节可以写入

EXECUTE

该节中的字节可以执行

SHARED

该节中的字节可以被多个实例共享(本属性能够有效地关闭copy-on-write机制)

常见的节名及作用

节名

作用

.bss

未经初始化的数据

.CRT

C运行期只读数据

.data

已经初始化的数据

.debug

调试信息

.didata

延迟输入文件名表

.edata

输出文件名表

.idata

输入文件名表

.rdata

运行期只读数据

.reloc

重定位表信息

.rsrc

资源

.text

. e x e或D L L文件的代码

.tls

线程的本地存储器

.xdata

异常处理表

怎么查看这些节 

可以用使用:Microsoft的Visual Studio的DumpBin实用程序

有一个更方便的工具:eXeScope.exe

怎么创建自己的节并让多个实例共享数据

  1. 自定义一个节
  2. 把变量放到自定义节中
  3. 注意变量要初始化。
  4. 告诉链接程序,某个节中的变量是需要加以共享的

如下:

#pragma comment(linker, "/SECTION:Shared,RWS")

#pragma data_seg("Shared")

long g_nCount1 = 0;

#pragma data_seg()

也可以用allocate把某变量加入到自定义节中,如下

__declspec(allocate("Shared")) long g_nCount3 = 0;

 
#include "stdafx.h"
#include "stdlib.h"
#include <iostream>
using namespace std;

#pragma comment(linker, "/SECTION:Shared,RWS") // 告诉链接程序,某个节中的变量是需要加以共享的

#pragma data_seg("Shared") // 创建一个称为“Shared”的节
long g_nCount1 = 0;
long g_nCount2;
#pragma data_seg()

// 也可以用allocate把某变量加入到自定义节中
__declspec(allocate("Shared")) long g_nCount3 = 0;

int _tmain(int argc, _TCHAR* argv[])
{
cout << "g_nCount1: " << ++g_nCount1 << " // 有初始化, 有加到自定义节中" << endl;
cout << "g_nCount2: " << ++g_nCount2 << " // 没有初始化,没有加到自定义节中" << endl;
cout << "g_nCount3: " << ++g_nCount3 << " // 利用__declspec(allocate(\"Shared\")) 把变量加到自定义节中" << endl;

system("pause");
return 0;
}
 

多次运行本例子:可以看到g_nCount1和g_nCount3在递增,而g_nCount2保持不变。

 

本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/07/11/1775277.html

windows笔记-在可执行文件或DLL的多个实例之间共享静态数据的更多相关文章

  1. [笔记]Delphi 2007写DLL供VC调用实例

    考虑如下几种常用情况: - VC传入int,返回int- VC传入char *,返回int- VC传入char *,返回char *及int 为简化问题,传递的字符串参数只考虑ANSI格式,不考虑UN ...

  2. [原创]使用GCC创建 Windows NT 下的内核DLL

    原文链接:使用GCC创建 Windows NT 下的内核DLL 在温习<<Windows 2000 Driving>>分层驱动程序一章的时候,看到了关于紧耦合驱动连接方式,这种 ...

  3. Windows笔记目录

    Windows笔记目录   Windows介绍 Windows入门--个人感想 初入Linux AD域控 FTP 服务器及权限 Server-U FTP与AD完美集成方案详解 其他 Linux大文件传 ...

  4. Windows自删除程序和DLL

    Windows自删除程序和DLL 参照文章 http://blog.csdn.net/rxxi/article/details/741557 做了个自删除的程序SelfDelete.代码下载(我的FT ...

  5. .h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的.附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够了 ...

  6. windows使用nginx+memcached实现负载均衡和session或者缓存共享

    windows使用nginx+memcached实现负载均衡和session或者缓存共享 两台server server1:115.29.186.215 windows2008 64位操作系统 ser ...

  7. 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据

    http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPa ...

  8. 纯静态界面中(html)中通过js调用dll中的方法从数据库中读取数据

    最近接到一个离职员工的任务,一个搭好框架的ERP系统,看了两天,说一下看到的东西,整个项目目录中我没发现一个.aspx后缀的文件,全是静态HTML文件,之后发现他用的jquery简直看的头疼,不过大概 ...

  9. Windows Server 2008 安装 10.2.0.5 单实例

    需求:Windows Server 2008 安装 10.2.0.5 单实例 原以为非常简单的一次任务,实际却遇到了问题,故记录一下. 1.安装10.2.0.1 2.安装10.2.0.4 3.安装10 ...

随机推荐

  1. scrapy::Max retries exceeded with url

    运行scrapy时出错这个错误:Max retries exceeded with url解决方法: img1=requests.get(url=aa,headers=header1,timeout= ...

  2. File类与常用IO流第七章——Properties集合

    Properties概述 java.util.Properties extends Hashtable<k,v> implements Map<k,v> Properties类 ...

  3. 微信小程序云开发-云存储-上传文件(word/excel/ppt/pdf)到云存储

    说明 word/excel/ppt/pdf是从客户端会话选择文件.使用chooseMessageFile中选择文件. 一.wxml文件 上传按钮,绑定chooseFile <!--上传文件(wo ...

  4. Word中的代码怎样语法高亮

    在平常我们粘贴代码到Word中的时候,经常会遇到代码粘贴到Word中后没有语法高亮,看着很乱很不友好,Word自带的样式---语法使用着也不尽人意, 网上有很多做法可以使得在插入在Word中的代码能够 ...

  5. 数据库count用法

    count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL  count(1)包括了所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL  count(列名)只包 ...

  6. odoo时间过滤

    Odoo中本日.本月.上月过滤器实现方法   Odoo中本日.本月.上月过滤器实现方法<filter string="今日订单" name="today" ...

  7. 如何反编译Python写的exe到py

    参考链接: https://blog.csdn.net/qq_44198436/article/details/97314626?depth_1-utm_source=distribute.pc_re ...

  8. Drupal 远程代码执行漏洞(CVE-2019-6339)

    影响版本 Drupal core 7.62之前的7.x版本.8.6.6之前的8.6.x版本和8.5.9之前的8.5.x版本 poc https://github.com/thezdi/PoC/blob ...

  9. anyRTC SDK 5月迭代:优化自定义加密功能,让通信更安全

    anyRTC SDK 5月上新,新增多种加密类型,让实时音视频通信更安全:新增移动端推流支持1080P分辨率的支持:此外还对事件上报.日志详情.数据统计.网络传输等多项功能进行了优化改进. 以下为更新 ...

  10. SPOJ ABCDEF题解

    题面 源 OJ 未 AC(卡 \(map\) ,不想写 \(hash\) ). 看到 \(n \leq 100\) ,显然 \(O(n^6)\) 会挂掉,所以要优化. 考虑到原式可化为 \(a \ti ...