0

使用以下代码打印 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 在后台跟踪每个进程的内存并正确映射到主内存吗?

谢谢

4

1 回答 1

0

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

是的。

于 2013-02-09T03:08:27.847 回答