如果我有一个指向某个函数的指针并将其交给另一个(Unrelated / Child)可执行文件,那么如何在不进行段错误的情况下调用该函数?
目前我可以创建一个函数并为其分配这个内存地址:
Dim As Function (ByRef As String) As Integer MyFunction
' get pointer...
MyFunction = FunctionPointer
然后调用MyFunction我得到一个段错误(显然是因为我调用的函数是在另一个可执行文件的地址空间,我不被允许访问)
我该如何解决这个/解决它?
答案 0 :(得分:7)
如果您可以控制其他可执行文件(您要从中调用函数),则将其构建为PIE
(与位置无关的可执行文件),然后加载它进入第一个可执行文件的地址空间。
在C
中,您将使用-fPIC -pie
构建,然后使用dlopen(3)
和dlsym(3)
。
在BASIC
中,我没有任何线索; - (
答案 1 :(得分:2)
并不是说“不允许”访问“其他函数的地址空间”,而是说该空间是完全不同且不相关的地址空间。每个进程都有自己的虚拟地址空间,因此指针的数值在另一个函数地址空间中没有任何意义,即使您能够以某种方式进行交换。
对于一般的进程间通信,您通常会从系统中明确请求共享内存,但我不确定FreeBasic是否公开了此类功能。为什么不查找一些现有的远程过程调用库?