2011-10-16 17 views
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による保護機能ですか?これをどのように切替えますか?

注:これは宿題ではありません。

答えて

1

プログラムの起動時のスタックレイアウトは、hereと記載されています。プログラムの名前を変更すると(実際は長さ)、レイアウトが変更されるのは明らかです。

+0

が完璧です。ありがとうございました。 –