具有相同堆栈指针的两个进程。为什么?

时间:2013-02-09 03:05:17

标签: linux-kernel computer-architecture

使用以下代码打印ESP寄存器:

#include <stdio.h>
#include <stdlib.h>

unsigned long get_sp() {
    __asm__("movl %esp, %eax");
}

int main() {
    sleep(5);
    printf("Stack pointer (ESP): 0x%x\n", get_sp());
    return 0;
}

禁用ASLR

echo "0" > /proc/sys/kernel/randomize_va_space

构建

gcc get_sp.c -o get_sp

运行两个流程:

./get_sp & ./get_sp

我明白了:

Stack pointer (ESP): 0xbffff158
Stack pointer (ESP): 0xbffff158

我期待不同的地址。任何人都可以对此有所了解吗?是因为这些是虚拟内存地址,并且Linux会跟踪每个进程的内存并正确映射到主内存吗?

由于

1 个答案:

答案 0 :(得分:0)

  

是因为这些是虚拟内存地址,并且Linux会跟踪每个进程的内存并正确映射到主内存吗?