Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Переполнение буфера


Автор: Keeper89 20.3.2009, 19:50
Добрый вечер!

Подскажите, пожалуйста, пару простых примеров кода на Delphi/Pascal с возможностью переполнения буфера. (то есть пример такого уязвимого кода).

Заранее благодарен.

Автор: bems 20.3.2009, 19:57
Код

var s:string; p:PChar;
begin
s := 'йа асёл а ни хакир';
GetMem(p, (length(s)-1)*SizeOf(char));
CopyMemory(p, PChar(s),  length(s)*SizeOf(char));
end

Автор: Keeper89 20.3.2009, 22:11
bems,  с указателями все понятно, спасибо за "освежение" памяти.
Меня больше интересует вопрос: встроенные типы Delphi (без PChar и т.п.) не подвержены этому? Например, переполнение Integer или ограниченной строки типа String[10]?

Автор: Rrader 21.3.2009, 16:33
Касательно строк - в любом случае для переполнения придется портить место, по которому в нормальных условиях определяется конец строки smile 
Код

procedure TForm1.Button1Click(Sender: TObject);
type
  TMyStruct = record
    case Boolean of
      True: (FValueByte: Byte);
      False: (FValue6: String[6]);
    end;
var
  S: TMyStruct;
begin
  S.FValue6 := '123456';
  S.FValueByte := 8;
  ShowMessage(S.FValue6);
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)