c# でのスタック オーバーフロー (原因) をよりよく理解するために、また教育目的で、脆弱なプログラムを作成したいと考えています。基本的に、EIP を上書きするスタック オーバーフローが「ただ」必要なので、それを制御して自分のコードを指すことができます。私の問題は次のとおりです。スタックをメモリの場所として使用するのはどのオブジェクトですか? 例: プログラムは、改行が見つかるまで再帰的なバイト単位の読み取りでテキスト ファイルを解析します (ええ、誰もこれをしないと思いますが、これは学習のためだけなので...)。現在、テキスト ファイルに chars の 16 進値を含む文字列を追加しています。この文字列は、main() の呼び出し後にインスタンス化されるオブジェクトのフィールドです。WinDbg を使用して、スタックが (ほぼ) 無限の再帰からオーバーフローした後にこれらの値を取得しました。
(14a0.17e0): Break instruction exception - code 80000003 (first chance)
eax=00000000 ebx=00000000 ecx=0023f618 edx=778570b4 esi=fffffffe edi=00000000
eip=778b04f6 esp=0023f634 ebp=0023f660 iopl=0
ところで、私は Win7x86 AMD マシンを使用しています。strcpy を使用してスタック オーバーフローを引き起こす多くの C++ の例を見てきましたが、C# に同様の方法はありますか?
よろしく、 NoMad
編集: このコードを使用して、スタック オーバーフローを引き起こします。
class FileTest
{
FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
string line = String.Empty;
public FileTest()
{
Console.WriteLine(ReadTillBreak());
}
private string ReadTillBreak()
{
int b = 0;
b = fs.ReadByte();
line += (char)b;
if (b != 13)
ReadTillBreak();
return line;
}
}
スタックをオーバーフローさせ、eip に行文字列 (つまり、test.txt の内容) を書き込むことは可能ですか?