Eu sei que o ponteiro de pilha pode ser usado para encontrar objetos alocados na pilha, mas como a CPU encontra objetos globais/estáticos? Pelo que pude perceber pela desmontagem, ela usa endereçamento absoluto/imediato, onde a instrução lea recebe um valor codificado, mas isso não quebraria por causa do ASLR?
Início
/
user-8189958
Badasahog's questions
Badasahog
Asked:
2025-02-11 16:54:32 +0800 CST
Estou ciente de que múltiplas cargas não voláteis podem ser colapsadas em uma única carga pelo compilador. Isso significa que funções de mapeamento de memória podem criar comportamento indefinido?
por exemplo:
int k = *p;
unmapFile(fm, fileHandle1);//the unmapped memory includes the address pointed to by p
//p is no longer valid, pointing to a virtual address that is unmapped
mapFile(fm, fileHanlde2);//p now points to an address somewhere in a different file
int j = *p;
//use k and j here
as duas desreferências de p podem ser reunidas em uma, fazendo com que o código se comporte de forma imprevisível?
como um aparte, eu sei que funções de mapeamento de arquivo não permitem que você especifique o endereço inicial do mapa (pelo menos em posix e windows), mas essa foi a hipótese mais simples que eu consegui pensar. De fato, há casos de uso para esse paradigma.