Definir heap executável

3

O programa execstack pode ser usado para marcar os binários ELF como precisando de uma pilha executável.

Existe uma maneira semelhante de marcar o heap como executável? De preferência, para um único binário, mas se isso não for possível, uma solução de todo o sistema também seria útil.

    
por Job 06.12.2011 / 17:05

1 resposta

2

Configurar uma pilha executável (ou configurar uma pilha não-executável) não fez diferença em nenhuma versão do Linux em que a testei (2.6.9 em x86_64, 2.4.21 em x86_64, 2.6.20.9 x86, 3.1.4 x86 ). Eu não tenho acesso a máquinas Solaris ou * BSD no momento. Eu estou supondo que os kernels em questão não são compilados para proibir a execução do código "na pilha". Veja este artigo da wikipedia , que diz que é necessário um patch ou uma opção de compilação.

Eu escrevi um programa em C que roda na memória malloc . Ele funciona em todos os mesmos núcleos e architecutres que eu mencionei acima. Eu duvido que você vai encontrar uma ferramenta específica como execstack para marcar um arquivo executável como "executável heap". O melhor que posso dizer é que você terá que usar a chamada do sistema mprotect() . Mesmo usando mprotect() , acho que você encontrará algumas das arquiteturas mais incomuns existentes (o antigo DEC Alpha ou o "Precision Architecture" da HP) que nunca permitirão a execução fora do heap.

    
por 06.12.2011 / 18:28