Как код динамической библиотеки узнает, в каком процессе он вызывается?

Как код динамической библиотеки узнает, в каком процессе он вызывается?

Если я правильно понял, один экземпляр dylib сохраняется в одном сегменте памяти при загрузке, затем он становится общими не скопированомежду несколькими процессами виртуальная память, которая в ней нуждается. Но как узнать, кто вызывает во время выполнения?

Например, я спрашиваю конструктор класса некоторой библиотеки, который зависит от имени моего процесса (не передавая имя напрямую, поскольку я могу передать любое имя), как он узнает, какой именно процесс из нескольких, к которым он присоединен, вызвался?

(Опуская тот факт, что в этом примере метаинформация не является секретом и может быть извлечена с помощью простого системного вызова) / Код библиотеки даже не может полагаться на информацию из памяти каждого процесса, как это теоретически возможно, поскольку та же схема совместного использования памяти, безусловно, не может быть применена в обратном порядке (одна библиотека <- много процессов одновременно) - это было бы большой дырой в безопасности.

Ситуация еще больше усложняется, когда библиотеке необходимо хранить некоторую специфичную для процесса информацию в своем классе как статическое свойство, которое будет совместно использоваться в рамках некоторого конкретного процесса, и/или не каждого процесса.эск которому он присоединен. Я предполагаю, что, по сути, данные будут записаны в память процесса в формате, который класс будет видеть как свое собственное обычное поле, но опять же - мы вернулись к проблеме распознавания процесса на уровне кода библиотеки.

решение1

В общем случае указатели на стек (откуда берется адрес возврата), кучу (хранилище данных) и некоторые переменные значения или адреса передаются в регистрах ЦП. Все эти адреса находятся в виртуальной памяти вызывающего. Код динамической библиотеки выполняется в контексте вызывающего, поэтому все системные вызовы ведут себя так, как будто их выполнил вызывающий.

Я называю общие библиотеки с указателями на мои вещи в моем виртуальном пространстве, а вы называете общие библиотеки с указателями своими вещами в вашем виртуальном пространстве.

Связанный контент