Ctypes: получить фактический адрес функции cPython

Программы на Python
Ответить
Anonymous
 Ctypes: получить фактический адрес функции c

Сообщение Anonymous »

Это сложно (по крайней мере для меня :-) и, возможно, неосуществимо. Но я пытаюсь спросить у вас.

У меня есть эта общая библиотека:

Код: Выделить всё

#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);
}
Скомпилировано следующим образом (в Linux):

Код: Выделить всё

gcc -fPIC -c -O2 shared.c && gcc -shared -o shared.so shared.o
Теперь я загружаю библиотеку и вызываю print_pointer_to_get_value():

Код: Выделить всё

>>> import ctypes
>>> so = ctypes.cdll.LoadLibrary('./shared.so')
>>> so.print_pointer_to_get_value()
pointer_to_get_value: 0x7f46e178f700
Я хотел бы получить от ctypes фактический адрес в виде целого числа функции get_value, напечатанный функцией print_pointer_to_get_value().
Моя конечная цель — переместить этот адрес в модуль Cython и вызвать эту функцию внутри функции Cython «nogil». Мне нужно загрузить библиотеку .so во время выполнения, поэтому я не могу скомпилировать свой модуль Cython, связав его с библиотекой.

1000 спасибо.

Подробнее здесь: https://stackoverflow.com/questions/496 ... c-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»