Como o código da biblioteca dinâmica sabe em qual processo é chamado?

Como o código da biblioteca dinâmica sabe em qual processo é chamado?

Se bem entendi, a única instância dylib é armazenada em um segmento de memória quando carregada, então ela se torna compartilhadae não copiadoentre múltiplos processos de memórias virtuais que necessitam dele. Mas como saber quem está ligando na hora da execução?

Por exemplo, pergunto ao construtor de classe de alguma biblioteca que depende do nome do meu processo (sem passar o nome diretamente, já que posso passar qualquer um), como ele saberá exatamente qual processo múltiplo ao qual está anexado foi chamado?

(Omitindo o fato de que neste exemplo a meta-informação não é um segredo e pode ser recuperada com uma simples chamada de sistema) / O código da biblioteca ainda não pode confiar nas informações de cada memória de processo que teoricamente poderia, como o mesmo compartilhamento de memória o esquema certamente não pode ser aplicado ao contrário (uma biblioteca <- muitos processos ao mesmo tempo) - seria uma grande falha de segurança.

A situação fica ainda mais complicada quando uma biblioteca precisa armazenar algumas informações específicas do processo em sua classe como uma propriedade estática, para ser compartilhada dentro de algum processo específico e/mas não em todos os processos.éao qual está anexado. Presumo que, de fato, os dados serão gravados na memória do processo em um formato que a classe verá como seu próprio campo regular, mas novamente - voltamos ao problema do reconhecimento do processo no nível do código de uma biblioteca.

Responder1

Em geral, ponteiros para a pilha (de onde vem o endereço de retorno), o heap (armazenamento de dados) e alguns valores de variáveis ​​ou endereços são passados ​​nos registradores da CPU. Todos esses endereços estão na memória virtual do chamador. O código da biblioteca dinâmica está sendo executado no contexto do chamador, portanto, todas as syscalls se comportam como se o chamador as tivesse feito.

Eu chamo as bibliotecas compartilhadas com ponteiros para minhas coisas, no meu espaço virtual, e você chama as bibliotecas compartilhadas com ponteiros para suas coisas, no seu espaço virtual.

informação relacionada