Page 1 of 1

Ctypes: Ermitteln Sie die tatsächliche Adresse einer C-Funktion

Posted: 12 Jan 2025, 16:31
by Guest
Das ist knifflig (zumindest für mich :-), vielleicht undurchführbar. Aber ich versuche Sie zu fragen.

Ich habe diese C-Shared-Bibliothek:

Code: Select all

#include 
#include 

static int variable = -666;

int get_value() {
return variable;
}

void print_pointer_to_get_value() {
printf("pointer_to_get_value: %p\n", &get_value);
}
So kompiliert (unter Linux):

Code: Select all

gcc -fPIC -c -O2 shared.c && gcc -shared -o shared.so shared.o
Jetzt lade ich die Bibliothek und rufe print_pointer_to_get_value() auf:

Code: Select all

>>> import ctypes
>>> so = ctypes.cdll.LoadLibrary('./shared.so')
>>> so.print_pointer_to_get_value()
pointer_to_get_value: 0x7f46e178f700
Ich möchte von ctypes die tatsächliche Adresse der get_value-Funktion als Ganzzahl erhalten, wie sie von print_pointer_to_get_value() gedruckt wird.
Mein letztes Ziel ist es, diese Adresse in ein Cython-Modul zu verschieben und diese Funktion innerhalb einer „Nogil“-Cython-Funktion aufzurufen. Ich muss die .so-Bibliothek zur Laufzeit laden, daher kann ich mein Cython-Modul nicht kompilieren und es mit der Bibliothek verknüpfen.

Vielen Dank.