gpt4 book ai didi

c - 将堆栈移动到特定位置

转载 作者:IT王子 更新时间:2023-10-29 00:45:01 26 4
gpt4 key购买 nike

如何将我的堆栈移动到特定的虚拟地址?例如,我希望我的堆栈大小为 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);
}

最佳答案

下面的代码围绕我们之前所做的 mmap 设置堆栈指针,并允许我们在 main2 函数中处理它:

bool flag = false;
int argc2;
char ** argv2;
int main2(){
...
}
int main(int argc, char ** argv){
argc2 = argc;
argv2 = argv;
ucontext_t cont;
getcontext (&cont);
if(!flag){
void* a = mmap((void*)0x34B000, 81920, PROT_EXEC | PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
if(a == MAP_FAILED){
printf("mmapfail");
return 1;
}
cont.uc_mcontext.gregs[REG_ESP] = 0x355000;
flag = true;
setcontext(&cont);
} else{
exit(main2());
}
}

关于c - 将堆栈移动到特定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36637784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com