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

2つのプロセスを実行します。

./get_sp & ./get_sp

私は得る:

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

しかし、私は別のアドレスを期待していました。誰かがこれに光を当てることができますか?これらは仮想メモリアドレスであり、内部的にLinuxはプロセスごとにメモリを追跡し、メインメモリに正しくマップするためですか?

ありがとう

4

1 に答える 1

0

これらは仮想メモリ アドレスであり、内部では Linux がプロセスごとにメモリを追跡し、メイン メモリに正しくマップしているためでしょうか?

はい。

于 2013-02-09T03:08:27.847 に答える