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

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

Post 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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post