Я хотел бы написать уязвимую программу, чтобы лучше понимать переполнение стека (причины) в C#, а также для образовательных целей. В принципе, я просто хочу переполнение стека, которое перезаписывает EIP, поэтому я получаю контроль над ним и могу указать на свой собственный код. Моя проблема: какие объекты используют стек в качестве места памяти? Например: Программа анализирует текстовый файл с рекурсивным показанием, пока не будет найден разрыв строки (да, я думаю, никто не сделал бы этого, но поскольку это только для обучения ...). В настоящее время я добавляю строку с шестнадцатеричным значением символов в текстовом файле. Эта строка является полем объекта, который инициализируется после вызова main(). Использование WinDbg, я получил эти значения после того, как стек потоплены (почти) бесконечной рекурсии:C# Переполнение переполнения стека EIP
(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
BTW Я использую машину Win7x86 AMD, если это из интереса. Я видел много примеров C++, вызывающих переполнение стека с помощью strcpy, есть ли какой-либо подобный метод в 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)?
Если вы хотите понять уязвимости управляемых систем, ознакомьтесь с замечательной книгой Erez Metula о руткитах с управляемым кодом: http://www.amazon.com/Managed-Code-Rootkits-Hooking-Environments/dp/1597495743/ ref = sr_1_1? ie = UTF8 & qid = 1332014581 & sr = 8-1 – zmbq