Monitorando o acesso a arquivos mapeados na memória (suportados pelo arquivo de paginação)

3

Alguém pode apontar uma ferramenta (ou ferramentas) para monitorar o acesso a arquivos mapeados na memória em sistemas Windows?

Procmon da Sysinternals / Microsoft não é adequado para a tarefa, aparentemente. Não parece ser capaz de monitorar operações que são apoiadas pelo próprio arquivo de paginação.

Atualização: minha pergunta não é sobre os valores / distribuição de vários métodos de alocação. Estou interessado em uma ferramenta (ou ferramentas) que me mostre acessos (principalmente open / create / close) para MMFs.

    
por 0xC0000022L 24.08.2011 / 21:35

2 respostas

0

Como você percebeu, ao compartilhar a memória entre processos, não há previsão para anunciar / consumir o recurso. Portanto, além de configurar a região de endereços compartilhados, você provavelmente precisará configurar algum tipo de infraestrutura de negociação fora de banda.

A escolha óbvia é criar um Win32 compartilhado / nomeado mutex ao lado também, com a finalidade de coordenar as coisas. O processo issuer pode criar o objeto de sincronização e, em seguida, esperá-lo eficientemente (ou seja, sem girar, pois é um Kernel32 primitivo) até que o processo chamador se conecte e libere o servidor .

Isso serve como uma notificação "push" (para o servidor) para fazer as coisas acontecerem; normalmente, isso seria apenas para fins de inicialização, durante o qual o emparelhamento cliente / servidor estabelece uma conexão privada (não publicada), se necessário, para durar a vida útil de sua sessão. Se a largura de banda esperada do projeto for de um certo tipo, eles podem até estabelecer um link assíncrono livre de bloqueio por CMPXCHG -ing na memória compartilhada, mas qualquer mecanismo de sinalização funcionará, incluindo cada um fornecendo um mutex para o uso um do outro. / p>

Assim, enquanto os pipes nomeados têm os procedimentos de configuração / desmontagem classificados como "internos", com a memória compartilhada, a desvantagem é que você é o seu próprio. Mas você certamente tem tudo o que precisa para despachar seu próprio recurso, e a vantagem é que você compartilha pedaços de memória de um lado para o outro, em vez de ter que descobrir como serializar tudo em um canal.

Na prática, você provavelmente não precisará criar a memória compartilhada até que um cliente chame, ponto no qual o cliente ou o servidor mapeariam um novo intervalo de memória compartilhada para uso particular entre eles. Seu objetivo aqui é evitar o uso de pipes nomeados, e descobrir como comunicar a quantidade (reconhecidamente mínima) de informações de configuração - ou seja, o endereço de memória do qword desse bloco, pelo menos. ser deixado como um exercício para o leitor. É um enigma bootstrapping (ou frango / ovo problema, se você preferir).

    
por 10.03.2018 / 00:30
-1

Isso já pode ter sido respondido aqui com sysinternals vmmap. Veja se ele atende às suas necessidades.

    
por 24.08.2011 / 23:37