
No Process Monitor, se escolhermos um processo específico e escolhermos sua propriedade, nas propriedades do evento, a guia do processo mostra o endereço de cada arquivo de biblioteca individual e a que esses endereços se referem? Os endereços em Stack também apontam para o local da memória virtual ou física?
Responder1
Todos os endereços mostrados são virtuais. Eles são os endereços iniciais das DLLs ou outros arquivos mapeados no espaço de endereço virtual do processo. Os endereços mostrados na aba Pilha também são virtuais.
Você pode ver uma análise semelhante no Process Explorer - habilite a "visualização de DLLs" no painel inferior. E também no VMmap, mas com mais detalhes. VMmap inclui os endereços de “seções” dentro de cada arquivo executável. Haverá uma seção para código, uma para dados somente leitura, uma para “recursos”, etc., além de algumas informações de controle.
Na verdade, é extremamente difícil para um sistema operacional de memória virtual em x86/x64 usar diretamente, ou seja, fazer referência a um endereço físico. Uma vez que o sistema "se torna virtual", ou seja, define o bit "Paging enable" em CR0 - o que acontece bem no início da inicialização - todos os endereços declarados pelo código em execução (seja kernel ou modo de usuário) são interpretados pela CPU como endereços virtuais, e devem ser traduzidos (usando informações das tabelas de páginas) para físicos antes de serem apresentados ao controlador de memória.
O código do kernel no sistema operacional, é claro, ''gerencia'' a memória física (por exemplo, atribuindo-a a processos que precisam dela) e manipula entradas de tabelas de páginas e números de páginas físicas, mas não pode ''referenciar'' diretamente a memória via os endereços físicos da memória.