使用.so(共享对象)中的内存映射文件

时间:2015-07-10 18:18:44

标签: c linux shared-libraries mmap

从共享对象(.so)中访问共享内存(内存映射文件,使用固定地址0x60000000)时,我收到了段错误。

我们有很多应用程序毫无困难地访问此共享内存。 我的应用程序的不同之处在于我用它创建了一个小的.so而.so是调用mmap并访问共享内存的那个。

mmap()返回正常。我要求的地址已正确退回。但是一旦我尝试从这个.so中访问内存,就会出现故障。

我无法弄清楚.so的独特之处在于它会阻止它以这种方式访问​​共享内存。

有人有想法吗?

1 个答案:

答案 0 :(得分:2)

一般情况下,从共享库访问mmap内存绝不会与主可执行文件访问它,并且您可能正在咆哮错误的树。那说,这个:

  

内存映射文件,使用固定地址0x60000000

通常是非常糟糕的主意,因为您之前无法控制mmap之前的内容(如果有的话)。 MAP_FIXED映射将简单地删除任何先前存在的映射。 如果您的库本身恰好被映射到那里,那么您将替换库.text.data,结果几乎肯定是一个神秘的崩溃。< / p>