Rabu, 14 Oktober 2009

Kesalahan pemrograman berupa "buffer overflow"

Pemrograman Delphi adalah salah satu bahasa pemrograman tingkat tinggi yang terkenal. Didalamnya terdapat banyak sekali library diantaranya ShellApi yang mempunyai kumpulan perintah-perintah. Salah satu yang sering digunakan adalah ShellExecute yaitu perintah untuk menjalankan file external. Format dari Perintah ShellExecute adalah:

ShellExecute(Handle_WIndow, Operasi, Nama_File, Parameter, Direktori, Show_Command);

Perintah ini dapat menjalankan file apa saja yang sudah terasosiasi dengan program yang dapat membukanya, misalnya *.htm dapat dibuka menggunakan Internet Explorer/Mozilla, *.txt oleh Notepad, juga *.exe,*.com dan *.bat dapat langsung dijalankan.

Terjadi permasalahan pada saat program yang kita buat menggunakan ShellExecute dan perintah tersebut digunakan untuk menjalankan dirinya sendiri. Sehingga program tersebut akan terus menerus menjalankan dirinya sendiri, sampai akhirnya komputer tersebut kehabisan alokasi memori atau Hang.

Contoh pemrograman yang salah tersebut adalah:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellApi;

type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var defdir:string;
begin
getdir(0,defdir);
ShellExecute(0,'open',pchar(defdir+'\Project1.exe'),'','',SW_NORMAL);
end;

end.

Program tersebut pada saat dijalankan akan menjalankan dirinya sendiri terus menerus.

Tidak ada komentar:

Posting Komentar