0

x86 システム

関数の戻り値を変更しようとしています。例えば

int foo(){
   char buffer[12]; 
   gets(buffer);
   return 1;
}

int main(){
   int value;
   value = foo();
   return 0;
}

foo() は常に 1 を返します。関数からの戻り値が %eax に格納されることはわかっています (したがって、1 は %eax に格納されます)。%eax 値に到達して変更する方法はありますか? %eax がスタックに表示されないため、これは起こり得ないと考えています!そうですか?

4

1 に答える 1

0

EAXあなたが推測する正確な理由から、バッファオーバーフローを介してその関数の値を変更することはできません。ただし、保存されたフレーム ポインターとリターン アドレスを含むスタック フレーム全体を上書きできるため、プログラムの実行を引き継ぐ可能性があります。

これを達成する方法は質問の範囲外のようですが、ASLR が使用されているかどうか、スタック カナリアが使用されているかどうか、実行不可能なスタックが配置されているかどうかなどによって異なります。

于 2015-06-11T02:18:52.447 に答える