Uma aplicação pode confirmar e anular memória de forma explícita?

3

É possível - de um aplicativo - controlar explicitamente as confirmações de página de memória? Em um aplicativo do Windows há muitos anos, eu escrevi um gerenciador de heap "alarm system" para me ajudar a encontrar um erro aleatório de referência / corrupção de heap. Consegui reservar uma grande área de memória virtual e depois confirmar / anular páginas à vontade. A ideia na época era criar um conjunto contendo uma página não confirmada, seguida por uma ou mais páginas comprometidas (suficientes para preencher a solicitação), seguidas por outra página não confirmada; com um sinalizador de tempo de compilação que controlava se o ponteiro retornado para o chamador estava no início ou no final da região comprometida (para disparar instantaneamente uma exceção em um underwrite ou overwrite, respectivamente). O Windows fornece uma API para reservar regiões de memória e confirmar páginas. Eu tenho outro uso para um buffer desse tipo em um programa Linux que estou escrevendo, e eu estou querendo saber se o kernel fornece o mesmo tipo de funcionalidade.

    
por JackLThornton 21.11.2017 / 02:39

1 resposta

4

Suponho que você esteja se referindo a VirtualAlloc e amigos . Não há equivalente direto no Linux, tanto quanto sei, mas você pode conseguir o mesmo efeito de várias formas. Se você quiser reservar memória, você pode usar mmap(2) ; para cometer, você precisa escrever para ele; para anulá-lo, você pode usar madvise(2) 's MADV_DONTNEED .

Para implementar páginas de proteção, você pode encontrar mprotect(2) como uma melhor opção, juntamente com um manipulador SIGSEGV . Você também pode observar a proteção contra estouro fornecida pelo seu compilador ( -fstack-protector etc. e as várias opções -fsanitize ).

    
por 22.11.2017 / 10:59