将符号链接到Windows DLL中的固定内存地址

时间:2014-11-18 22:08:44

标签: windows pointers dll linker embedded

我有一个不寻常的情况,我需要创建一个DLL,声明一些符号是预先确定的内存位置。它是一个嵌入式系统,带有一堆使用共享内存的模块,它总是从同一个位置开始。

C源文件都包含一堆样板文件,如下所示:

__declspec(dllimport) struct shmem_block {
    unsigned char  dum0000001[4952];                                              
    int            _yallahabibi[1];
} arftest;

为了使这项工作,我需要编译并链接一个DLL,该DLL声明arftest指向特定的内存位置。怎么能创建这样的DLL?使用C,我可以声明一个指针并使其指向某处,但是如何使变量名(符号)指向内存位置?

1 个答案:

答案 0 :(得分:0)

由于Windows中的内存虚拟化和保护,我认为您必须实现设备驱动程序才能直接访问物理内存。

通常,数据对象到特定位置的位置需要编译器扩展和链接器支持;因此,如果支持,这将是特定工具链。

在一般情况下,您将使用指针而不是实例化对象; e.g:

volatile my_struct* my_object = (my_struct*)0x00008000;

然后通过指针访问数据; e.g:

my_object->some_member = 0x00080 ;

或者,在C ++中,您可以使用 placement new