Wie verschiebe ich meinen Stack zu einer bestimmten virtuellen Adresse? Zum Beispiel möchte ich, dass mein Stack 40960 groß ist und in der Adresse 0x355480 beginnt. Ich habe versucht, mit SetContext zu spielen, aber ich würde gerne wissen, ob es eine ‚Standard‘ Art und Weise, das zu tun:Stapel an bestimmten Ort verschieben
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);
}
Sie können eine Funktion implementieren, dh switch_stack in Assembly und das Register esp mit Ihrem angegebenen Wert zuweisen. –
Sie können einen vorhandenen Stapel nicht wirklich zufällig verschieben; Es kann absolute Zeiger geben, um Variablen überall zu stapeln. –
aber ich kann es am Anfang des Programms tun, wenn nichts Wichtiges noch da ist. – JKS