是不是在linux中修复了堆栈的起始地址?

时间:2011-04-17 04:10:29

标签: linux stack

unsigned long find_start(void){
    __asm__("movq %rsp, %rax");
}
int main(){
    printf ("OX%x\n" , find_start()) ;
}

这是my previous one

的进一步问题

每次运行程序时输出都不同。

不是linux中修复的堆栈的起始地址吗?

内核版本为 2.6.18-194.el5

从评论中更新:我现在正在尝试做一个hello world exploit,如何克服这个问题?execve创建的进程是否会使用与其父进程相同的堆栈起始地址? / p>

3 个答案:

答案 0 :(得分:4)

也许你看到了address space layout randomization的影响。这是一个安全功能,使得更难利用堆栈或缓冲区溢出。

答案 1 :(得分:0)

答案 2 :(得分:-1)

在支持多个进程和多个线程的操作系统上,这怎么可能?

编辑:我应该提一下我在评论中提到的内容:Address Space Layout Randomization,这是一个故意扰乱地址的安全功能。