私はスタックの開始から現在のスタックポインタへのオフセットを計算しようとしています。/proc/[pid]/mapsからactiveallスタックベースを取得する方法は?
私は/ procの/ [PID] /マップを読んだとき、私は
befdf000-bf000000 rwxp 00000000 00:00 0 [stack]
0xbefdf000を見るには、スタックの先頭アドレスのように見えます。 問題は、gdbの実際のスタックポインタが0xbefff440のようなものであるということです。
0xbefff440が0xbefdf000より大きい場合、実際のスタックポインタが/ proc/*/mapsからのスタックアドレスよりも高い可能性はありますか?
gdb memory examine関数の最高可読スタックアドレスは0xbeffffffで、これは実際のスタックの開始と似ていますが、procマップではbefdf000は何ですか?もしそれが本当のスタックベースでないなら、/ proc /からどのように0xbeffffff(ASLRが有効になっているかもしれない)を得るか?
私はqemuのARM Debianでテストを行っています。 ASLRを無効にして、異なるプログラム実行間でスタックアドレスが変更されないようにしました。
しかし、/ proc/*/mapsによるbefdf000-bf000000の範囲はありませんか? 0xbefff440はbefdf000-bf000000の範囲にはなく、それは私を混乱させます – user554738
ええ、そうです。 0xbf000000は0xbeffffffの直後のアドレスであり、0xbefff440はそれより少し下にある。範囲は半開間隔で表されるので、 '0xbefdf000-0xbeffffff'は' 0xbefdf000 <= x <0xbeffffff'のすべてのアドレスxを意味しますが、問題のアドレスは関係のない境界で正しくないためです。 –
ああ、ありがとう。私は不注意で、最初のアドレスが高いと思った、私は2番目のアドレスが気付いていないb ** F ** 000000私はそれがB ** E ** 000000だと思った – user554738