Làm cách nào để di chuyển ngăn xếp của tôi đến địa chỉ ảo cụ thể? Ví dụ tôi muốn cho ngăn xếp của tôi được 40960 lớn, và bắt đầu trong địa chỉ 0x355480. Tôi cố gắng chơi với setcontext, nhưng tôi muốn biết liệu có một cách 'tiêu chuẩn' để làm điều đó:Di chuyển chồng đến vị trí cụ thể
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);
}
Bạn có thể thực hiện một chức năng tức là switch_stack trong lắp ráp và gán esp đăng ký với giá trị quy định của bạn. –
Bạn không thể thực sự di chuyển một ngăn xếp hiện tại một cách ngẫu nhiên; có thể có các con trỏ tuyệt đối để ngăn các biến ở khắp mọi nơi. –
nhưng tôi có thể làm điều đó vào đầu chương trình, khi không có gì quan trọng. – JKS