将函数指针保存在共享内存中

时间:2017-12-27 11:14:32

标签: c linux

我知道多个应用程序可以使用共享内存保存和使用数据。我想知道是否可以将函数指针保存在共享内存中?我的目的是从我的共享对象调用函数具有相同的返回值和不同应用程序的参数。

4 个答案:

答案 0 :(得分:2)

没有

除非您以某种方式将代码加载到共享内存区域,否则导致代码在两个进程中的同一地址加载,否则函数指针将无效。

答案 1 :(得分:0)

除非你完全确定你在做什么,否则在共享内存段中保存函数指针对我来说听起来不错,你最终可能会访问一个你的进程没有特权的函数指针,并且可能会结束崩溃你的程序。

答案 2 :(得分:0)

无法保证将共享库加载到两个不同应用程序的同一地址。更糟糕的是,由于地址空间布局随机化,库可以加载到任何随机地址。因此,函数指针不是不变的,因此不能存储在任何地方。

作为解决方案,您可以在两个进程中创建一个包含所有可能回调的函数表,并将偏移存储到共享内存中的函数。当然,这些表应该完全相同。

答案 3 :(得分:-1)

不,不能共享函数指针,如果需要,你需要创建该函数的库并在你的过程中使用它