Sistema MProtect Chamada em C

Sistema MProtect Chamada em C

A chamada do sistema MProtect () em C foi usada para especificar ou alterar a proteção necessária para a (s) página (s) de memória do processo. Esta página (s) de memória compreende uma participação ou todo o intervalo de endereços no intervalo que é: [addr, addr+len-1]. Vejamos o sistema MProtect () para ver como ele funciona e é usado ao usar algum programa de página de memória no Ubuntu 20.04 Sistema. Então, faça login no Ubuntu 20.04 Sistema e inicie seu console de shell na área de trabalho por ctrl+alt+t.

Exemplo 01:

Vamos ter nosso primeiro exemplo para a chamada do sistema mProtect (). Crie um arquivo do tipo C no sistema dentro do terminal usando uma consulta "Touch" conforme a imagem de saída declarada.

$ toque mProtect1.c

Agora o arquivo foi criado corretamente, abra -o em algum editor como GNU ou Vim. Temos um editor GNU instalado e configurado em nosso Ubuntu 20.04 Sistema. Então, estamos usando -o para abrir o arquivo C recém -fabricado, conforme a instrução mostrada na imagem.

$ nano mprotect1.c

Agora somou algumas bibliotecas C necessárias para o funcionamento de uma chamada do sistema mProtect (). Definimos um método de erro de alça embutido usado para exibir a mensagem passada em seu argumento sobre algum problema. Um "manipulador" de método foi definido aqui e gera o sinal sigsegv quando um método de manipulador tenta obter memória de uma maneira que se intromete à proteção. Ele também busca o endereço da página onde este erro foi encontrado.

A função principal foi definida aqui para iniciar a execução do código C. Um ponteiro do tipo de caractere foi definido e um "psize" inteiro foi definido para definir o tamanho da página. A estrutura sigaction “s” foi definida aqui para lidar com um sinal. A bandeira Sigaction foi usada para obter especificar o método de manuseio de sinal usando SA_SIGINFO. Dentro da execução, o sistema bloqueou o conjunto adicional de sinais usando SA_MASK e faz a fila vazia por Sigemptyset. O sa_sigaction armazena o endereço do manipulador de sinal para os sinais que não estão na fila.

Se a função Sigaction passa o sinal como "sigsegv", o método de ponteiro e nulo e a função retornar -1, o erro de manipulação será "sigaction" como o erro, e o tamanho da página foi salvo para psize. Se o tamanho for menor que 0, o erro do SySconf será enviado. A memória de 4 páginas foi atribuída ao buffer. Se o buffer for nulo, o erro "memalign" será enviado. A declaração de impressão exibirá o endereço inicial de um buffer. Outra instrução se foi usada aqui para verificar a proteção da memória e incrementar o índice do buffer.

Após a compilação pelo comando e execução do GCC, temos que exibe a região original e depois exibe o sistema recebeu o sinal Sigsegv enquanto algo sai do caminho.

$ GCC MProtect1.c
$ ./a.fora

Exemplo 02:

Vamos ter outro exemplo para demonstrar a chamada do sistema mProtect (). Crie um novo arquivo primeiro.

$ touch mProtect2.c

Abra o arquivo.

$ nano mprotect2.c

Depois que o cabeçalho foi incluído, um ponteiro inteiro e estático foi inicializado. O método do manipulador foi usado aqui para mostrar que a memória foi acessada. A chamada do sistema MProtect foi usada aqui para passar a memória, o tamanho e alguns outros argumentos como parâmetros.

O método principal contém descritores do tipo inteiro e tipo de estrutura sigaction "s". Em seguida, instalamos um método Handler () como o manipulador SIGSEGV. Depois disso, alquei uma memória de 1 página no caminho do arquivo mostrado e o salvei para arquivar o descritor "f". Depois de mapear a memória, o descritor foi fechado. Usaremos o ponteiro variável "M" para obter uma cópia particular escrevendo em uma página. Em seguida, adicionamos a chamada do sistema MProtect para impedir a atribuição de direitos de escrita à memória. Então escrevemos 1 na página. Isso escreverá sobre a memória atribuída da página. A declaração de impressão foi usada para exibir a mensagem de conclusão, e o método Munmap () foi usado aqui para facilitar a memória alocada.

Vamos compilar e executar este código atualizado no terminal usando o "GCC" e "./a.fora ”comandos. O sistema mostra que a memória foi acessada, atribuída e não mapeada a uma única página. O “tudo concluído!”A mensagem foi exibida na sua tela.

$ ./a.fora

Conclusão:

Neste artigo, elaboramos dois exemplos para entender o funcionamento do sistema MProtect () para proteger a memória atribuída a uma página. Os exemplos contêm o uso das funções do manipulador; Métodos UMAP de memória, estruturas sigaction e dicas para alcançar os resultados desejados.