Запретить замену символов при загрузке библиотеки Dynami c - PullRequest
0 голосов
/ 18 февраля 2020

Кажется, я вошел в "адский линк", и я не уверен, как решить возникшую у меня проблему.

Я пытаюсь написать движок OpenSSL (https://www.openssl.org/docs/man1.0.2/man3/engine.html), что позволит командам OpenSSL использовать мою библиотеку PKCS # 11 для доступа к моему аппаратному криптокену для выполнения операций cryptographi c. Проблема в том, что моя библиотека PKCS # 11 также использует OpenSSL (например, для генерации ключей, используемых для шифрования связи между хостом и аппаратным токеном). У меня статически связано в libcrypto с моей библиотекой PKCS # 11, и без использования механизма сама библиотека работает правильно.

Когда я запускаю readelf -s для моей библиотеки PKCS # 11, Я вижу все символы OpenSSL, определенные и в адресном пространстве GLOBAL.

Однако проблемы начинают появляться, когда я загружаю свою библиотеку PKCS # 11 в OpenSSL, используя движок. Когда это происходит, любой из статически скомпилированных символов (например, RAND_bytes) игнорируется, и когда моя библиотека выполняет вызов функции OpenSSL (снова, например, RAND_bytes) вместо вызова функций, которые были Статически связанный с библиотекой, он вызовет функцию RAND_bytes в библиотеке OpenSSL, в которую он загружается.

Например, если я запускаю openssl rand -e <my engine name> -hex 64 вместо моей библиотеки с использованием RAND_bytes Функция статически связана, она вызовет RAND_bytes библиотеки OpenSSL, которую использует приложение openssl, в результате чего бесконечно l oop.

Я прошу прощения, если я сделал плохая работа, описывающая проблему, это довольно сложно объяснить. Я не уверен, где go отсюда, и, честно говоря, я не уверен, есть ли решение.

...