Uma multa detalhes sobre como DLLs são realocados como o resultado de uma colisão de endereço base e consequências

Raymond

19 de janeiro de, 2017

Se uma DLL deve ser realocados devido a um conflito de endereço base e, em seguida, a imagem será transferida, e toda a realocados DLL agora é feito pela página do arquivo.

se você ler a descrição com mais cuidado, verá que não é exatamente toda a DLL realocada que é apoiada pelo arquivo da página. Mais precisamente, todas as páginas que continham correções são colocadas no arquivo de página. Se você tiver sorte e tiver uma página sem nenhuma correção, essa página ainda será paginada por demanda da imagem porque o kernel não aplicou nenhuma correção a ela e, portanto, não incorreu em uma cópia na gravação dessa página, portanto, ela continua sendo suportada pela imagem do sistema de arquivos.

um dos argumentos que vi por causar intencionalmente uma colisão de endereço base é que a DLL realocada seja copiada para o arquivo de página, o que é uma vitória se o arquivo de página estiver em um meio mais rápido do que a DLL. Por exemplo, o arquivo de página pode estar em um SSD ou (gasp) uma unidade de RAM.

essa lógica não leva em consideração o caso de páginas sem correções. Essas páginas ainda entrarão diretamente no arquivo original, o que é um problema se o arquivo original estiver em um meio muito lento ou um meio que possa ser perdido, como uma unidade de CD-ROM ou unidade de rede.

felizmente, você não precisa jogar jogos engraçados com conflitos de endereço base para obter toda a sua DLL carregada no arquivo de página. Em vez disso, use o sinalizador / SWAPRUN linker que permite especificar no cabeçalho do módulo que o carregador deve copiar a imagem para o arquivo de troca.

Raymond Chen

Siga

Deixe uma resposta

O seu endereço de email não será publicado.