動的ライブラリのコードは、自分が呼び出されるプロセスをどのように知ることができますか?

動的ライブラリのコードは、自分が呼び出されるプロセスをどのように知ることができますか?

正しく理解した場合、dylibインスタンスはロード時にメモリセグメントに保存され、共有されます。そしてコピーもありません。複数のプロセス間に仮想メモリが必要です。しかし、実行時に誰に電話する必要があるのか​​、どうすればわかりますか?

たとえば、私のプロセス名に依存するライブラリのクラスコンストラクタ(実際に名前を渡すことができるので、名前を直接渡す必要はありません)にリンクされている複数のプロセスが実際にWhatを呼び出すかどうかはどうすればわかりますか?

(この例では、メタ情報は秘密ではなく、単純なシステムコールで取得できるという事実を無視します。)/ライブラリのコードは、理論的に依存するプロセス固有のメモリに関する情報でさえ依存することはできません。メモリ共有と同じ方法は逆方向には適用できません(1つのライブラリ<-同時に複数のプロセス)。これは大きなセキュリティホールです。

ライブラリがすべてのプロセスではなく、特定のプロセス間で共有する静的属性で、一部のプロセス関連情報をクラスに格納する必要がある場合、状況はさらに複雑になります。英語ついているのです。実際、データは、クラスが自分の通常のフィールドとして扱う形式でプロセスメモリに書き込まれると仮定します。しかし、再びライブラリコードレベルのプロセス識別の問題に戻ります。

ベストアンサー1

通常、スタック(戻りアドレスのソース)、ヒープ(データストア)、およびいくつかの変数値またはアドレスへのポインタがCPUレジスタに渡されます。これらのアドレスはすべて呼び出し側の仮想メモリにあります。ダイナミックライブラリコードは呼び出し元のコンテキストで実行されるため、すべてのシステム呼び出しは呼び出し元が完了したかのように機能します。

私は私のものへのポインタを使って私の仮想空間の共有ライブラリを呼び出し、ユーザーは自分のものへのポインタを使って仮想空間の共有ライブラリを呼び出します。

おすすめ記事