o sub questão x86-instrução

votos
0

Suponha que temos o seguinte código c

void fun(void){
    printf(this is fun\n);
}

Então, nós compilá-lo com o modo de depuração, temos o seguinte código desmontar:

push ebp
mov ebp,esp
sub esp, 0xc0
...

Ok, nós só discutir:

sub esp, 0xc0

Minha pergunta é: por que é o valor padrão aqui 0xc0, e não o outro valor, como 0xF0, 0xFF... e assim por diante?

Publicado 18/12/2018 em 10:04
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

Esta é uma configuração padrão de quadro de pilha, poupando o ponteiro de pilha, em seguida, utilizando a EBP para indexação. O montante subtraído do ESP é o que é alocada para armazenamento variável local do procedimento, e variáveis ​​locais serão acessados ​​referenciando [EBP- ??].

Sem ver o código para o seu procedimento é difícil dizer por que ele aloca que muito armazenamento. Não há nenhum valor padrão usado pelo compilador, ele sempre aloca exatamente o que é necessário. Ele pode fazer isso porque variáveis ​​locais tipos devem ser expressamente declarada, e o compilador sabe quanto espaço é usado por cada tipo. Não há aleatoriedade ou incerteza nela, e nenhum benefício para a alocação de armazenamento extra. Também não posso ver como randomização o tamanho de armazenamento variável local seria evitar qualquer tipo de ataque com base na pilha. A maioria dos processadores modernos têm medidas de prevenção de execução de dados de hardware no lugar, tornando estes ataques impossível de qualquer maneira.

Respondeu 18/12/2018 em 11:43
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more