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