それは私にとってはそれほど問題ではありませんが、私はそれについて考え始めたばかりで、私が尋ねると思いました。プログラムを実行するたびに異なる値(0x3759F8B0-0x100)が返されるのはなぜですか?
ある時は00AFFD00と言い、次の時は006FFD48と言います
test = 0x3759F8B0 - 0x100;
cout << &test << endl;
私はあなたの完全なプログラムソースが次のように読むと思います
#include <iostream>
using namespace std;
int main()
{
int test;
test = 0x3759F8B0 - 0x100;
cout << &test << endl;
}
@patがコメントですでに述べたように、プログラムは変数の値ではなく、変数のアドレスを出力test
します。最新のオペレーティングシステムには、「アドレス空間配置のランダム化」(ASLR、概要についてはhttps://en.wikipedia.org/wiki/Address_space_layout_randomizationを参照)と呼ばれるものがあり、に存在する可能性のあるセキュリティの脆弱性を悪用するのを困難にします。プログラム。アイデアは、プログラムの新しい開始ごとに、それが使用するもののアドレスがランダム化されるということです。したがって、変数のアドレスは、ASLRを有効にして起動するたびに変更されます。
ASLRは現在、主流のオペレーティングシステムの標準機能です。ただし、無効にすることができ(非推奨)、ASLRがないと、上記のプログラムは実際に常に同じ出力を出力します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加