1

如果我有一个指向函数的指针并将其提供给另一个(无关/子)可执行文件,我如何在不产生段错误的情况下调用该函数?

目前我可以创建一个函数并为其分配这个内存地址:

Dim As Function (ByRef As String) As Integer MyFunction
' get pointer...
MyFunction = FunctionPointer

但是然后调用 MyFunction 我得到一个段错误(显然是因为我正在调用的函数在另一个可执行文件地址空间中,我不允许访问)

我该如何解决这个问题/解决它?

4

2 回答 2

8

如果您可以控制另一个可执行文件(要从中调用函数的那个​​),则将其构建为PIE(与位置无关的可执行文件),并将其加载到第一个可执行文件的地址空间中。

C中,您将使用 构建-fPIC -pie,然后使用dlopen(3)and dlsym(3)

BASIC,我不知道;-(

于 2011-07-08T04:27:35.607 回答
2

与其说您“不允许访问”另一个函数的地址空间,不如说该空间是一个完全不同且不相关的地址空间。每个进程都有自己的虚拟地址空间,因此指针的数值在另一个函数地址空间内没有意义,即使您能够以某种方式交换它。

对于一般的进程间通信,您通常从系统显式请求共享内存,但我不确定 FreeBasic 是否公开了此类功能。为什么不查找一些现有的远程过程调用库?

于 2011-07-07T21:05:00.823 回答