Я хотел бы написать уязвимую программу, чтобы лучше понять переполнение стека (причины) в c #, а также в образовательных целях.По сути, я «просто» хочу переполнение стека, которое перезаписывает EIP, поэтому я получаю контроль над ним и могу указать на мой собственный код.Моя проблема: какие объекты используют стек в качестве области памяти?Например: Программа анализирует текстовый файл с рекурсивным побайтным чтением до тех пор, пока не будет найден разрыв строки (да, я думаю, никто этого не сделает, но так как это только для обучения ...).В настоящее время я добавляю строку с шестнадцатеричным значением символов в текстовом файле.Эта строка является полем объекта, который создается после вызова 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
Кстати, я использую машину AMD Win7x86, если это из интереса.Я видел много примеров C ++, вызывающих переполнение стека с помощью strcpy, есть ли подобный метод в c #?
Best Regards, NoMad
edit: я использую этот код, чтобы вызвать переполнение стека.
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)?