次のコードを使用して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
2つのプロセスを実行します。
./get_sp & ./get_sp
私は得る:
Stack pointer (ESP): 0xbffff158
Stack pointer (ESP): 0xbffff158
しかし、私は別のアドレスを期待していました。誰かがこれに光を当てることができますか?これらは仮想メモリアドレスであり、内部的にLinuxはプロセスごとにメモリを追跡し、メインメモリに正しくマップするためですか?
ありがとう