Bellek korumasi.

Nazim Koc (nazim@mam.gov.tr)
Wed, 26 Mar 1997 09:02:22 +0200 (EET)


Merhaba,

Belirli bellek bolgelerinin korunmasi ile ilgileniyorum.
Linux'de mprotect adli bir fonksiyon var. Bu fonksiyon ile
belirli bir adresten baslayan ve belirli bir uzunluga sahip
bellek bolgesine okuma, yazma korumasi veya calistirma
ozelligi kazandirabiliyorsunuz. Bunlarin kendi aralarindaki
kombinezonu da uygulanabiliyor. 'man mprotect' ile daha ayrintili
bilgi alinabilir. Bu 'man' bilgisinde fonksiyonun ikinci argumani
hatali belirtilmistir, 'size_t *len' degil 'size_t len' olacaktir.

Benim derdim, bu fonksiyon her zaman hatali donuyor.
Acaba bu fonksiyonu daha once kullanan var mi?
Link 2.0.0 kernel kullaniyorum. 'man' bilgisinde var ama gercekten
uygulanmis mi yoksa ileriye hazirlik olsun diye mi konmus. Cunku
Linux'de boyle pek cok komut var. Diger bir deyisle kendisi
var ama cagrildiginda her zaman hatali donuyor.

'man mprotect' bilgisinden aldigim ornek programi asagida veriyorum.
Bu program her zaman hatali donuyor. ilgilenecek arkadaslara
simdiden tesekkur ederim.

iyi calismalar.

Nazim.

ORNEK PROGRAM:
--------------------------------------------------------------
int
main(void)
{
char *p;
char c;

/* Allocate a buffer; it will have the default
protection of PROT_READ|PROT_WRITE. */
p = malloc(1024);
if (!p) {
perror("Couldn't malloc(1024)");
exit(errno);
}

c = p[666]; /* Read; ok */
p[666] = 42; /* Write; ok */

/* Mark the buffer read-only. */
if (mprotect(p, 1024, PROT_READ)) {
perror("Couldn't mprotect");
exit(errno);
}

c = p[666]; /* Read; ok */
p[666] = 42; /* Write; program dies on SIGSEGV */

exit(0);
}
-------------------------------------------------------------------------