在无关的可执行linux中调用函数

时间:2011-07-07 20:58:32

标签: linux function segmentation-fault zipcode

如果我有一个指向某个函数的指针并将其交给另一个(Unrelated / Child)可执行文件,那么如何在不进行段错误的情况下调用该函数?

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

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

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

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

2 个答案:

答案 0 :(得分:7)

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

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

BASIC中,我没有任何线索; - (

答案 1 :(得分:2)

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

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