使用以下代码打印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会跟踪每个进程的内存并正确映射到主内存吗?
由于
答案 0 :(得分:0)
是因为这些是虚拟内存地址,并且Linux会跟踪每个进程的内存并正确映射到主内存吗?
是