Come spostare il mio stack su un indirizzo virtuale specifico? Ad esempio, mi piacerebbe che il mio stack fosse grande 40960 e iniziasse all'indirizzo 0x355480. Ho provato a giocare con setContext, ma mi piacerebbe sapere se c'è un modo 'standard' per farlo:Spostamento dello stack su un posto specifico
ucontext_t cont;
bool flag = false;
getcontext (&cont);
if(!flag){
void* a = mmap((void*)0x34B000, 81920, PROT_EXEC | PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
cont.uc_mcontext.gregs[REG_ESP] = 0x355000;
flag = true;
setcontext(&cont);
}
È possibile implementare una funzione, ad esempio switch_stack in assembly e assegnare il registro esp al valore specificato. –
Non è possibile spostare una pila esistente a caso; ci possono essere indicatori assoluti per impilare le variabili ovunque. –
ma posso farlo all'inizio del programma, quando non c'è ancora nulla di importante. – JKS