मेरे स्टैक को विशिष्ट आभासी पते पर कैसे स्थानांतरित करें? उदाहरण के लिए, मैं अपने ढेर के लिए 40 9 60 बड़ा होना चाहता हूं, और पते 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