sintaxis - función de llamada en Linux ejecutable no relacionado
sigsegv segmentation fault occurred c (2)
Si tengo un puntero a una función y se la doy a otro ejecutable (no relacionado / secundario), ¿cómo puedo llamar a esa función sin realizar una segfault?
Por el momento puedo crear una función y asignarle esta dirección de memoria:
Dim As Function (ByRef As String) As Integer MyFunction
'' get pointer...
MyFunction = FunctionPointer
Pero luego, al llamar a MyFunction, obtengo un segfault (Obviamente, porque la función que estoy llamando está en otro espacio de direcciones de ejecutables al que no tengo acceso)
¿Cómo puedo solucionar esto / solucionarlo?
No se trata tanto de que "no se le permita" acceder al espacio de direcciones de la otra función, sino que ese espacio es un espacio de direcciones totalmente diferente y no relacionado. Cada proceso tiene su propio espacio de direcciones virtuales , por lo que el valor numérico de su puntero no tiene ningún significado dentro de otro espacio de direcciones de funciones, incluso si fue capaz de intercambiarlo de alguna manera.
Para la comunicación general entre procesos generalmente solicita memoria compartida explícitamente desde el sistema, pero no estoy seguro si FreeBasic expone dicha funcionalidad. ¿Por qué no buscar algunas bibliotecas de llamadas a procedimientos remotos existentes?
Si tiene control sobre el otro ejecutable (aquel desde el que desea llamar a una función), compárelo como un PIE
(ejecutable independiente de la posición) y cárguelo en el espacio de direcciones del primer ejecutable.
En C
, construirías con -fPIC -pie
, luego dlopen(3)
y dlsym(3)
.
En BASIC
, no tengo ni idea ;-(