2
私はbashを使用しています。環境変数のアドレスのランダム化
:私はMYSHELL
のアドレスを取得するために、Cプログラムを書いた私は
#sysctl -w kernel.randomize_va_space=0
を使用してのUbuntu 11.04でASLRをオフにしていると私は
$ export MYSHELL=/bin/sh
を使用して、シェルから変数をエクスポートしました
void main(){
char* shell = getenv("MYSHELL");
if (shell)
printf("0x%x\n", (unsigned int)shell);
}
spatout 0xbffffe82
です。 ret-to-libcの攻撃の一部として使用したとき、アドレスは(非常に小さなオフセットではあるが)変更されます。 なぜこれが起こりますか?
また、バイナリのファイル名を変更して以前に成功したアドレスを使用すると、動作しなくなり、別のアドレスに再配置されました。どうして?つまり、バイナリ名と環境変数のアドレスの関係は何ですか?これはbashによる保護機能ですか?これをどのように切替えますか?
注:これは宿題ではありません。
が完璧です。ありがとうございました。 –