スタックを特定の仮想アドレスに移動するにはどうすればよいですか?たとえば、スタックが40960大きく、アドレス0x355480から始まるようにしたいと思います。私はsetcontextで遊んでみましたが、私はそれを行うための「標準的な」方法があるかどうかを知りたいのです:スタックを特定の場所に移動する
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);
}
あなたは、アセンブリ内の関数すなわちswitch_stackを実装して、指定した値とESPレジスタを割り当てることができます。 –
既存のスタックを実際にランダムに移動することはできません。どこでもスタック変数への絶対ポインタが存在する可能性があります。 –
しかし、私はプログラムの初めにそれを行うことができます、何も重要なことはまだありません。 – JKS