unsigned long find_start(void){
__asm__("movq %rsp, %rax");
}
int main(){
printf ("OX%x\n" , find_start()) ;
}
的进一步问题
每次运行程序时输出都不同。
不是linux中修复的堆栈的起始地址吗?
内核版本为 2.6.18-194.el5
从评论中更新:我现在正在尝试做一个hello world exploit,如何克服这个问题?execve创建的进程是否会使用与其父进程相同的堆栈起始地址? / p>
答案 0 :(得分:4)
也许你看到了address space layout randomization的影响。这是一个安全功能,使得更难利用堆栈或缓冲区溢出。
答案 1 :(得分:0)
答案 2 :(得分:-1)
在支持多个进程和多个线程的操作系统上,这怎么可能?
编辑:我应该提一下我在评论中提到的内容:Address Space Layout Randomization,这是一个故意扰乱地址的安全功能。