Merhabalar. Malum sebepten vizeler iptal olunca hocalar ödevleri yığdı üstümüze. Ödev kısa ancak anlaması zor :
1) Bir prosesin data, yığıt (heap) ve yığın (stack) gibi bölümleri için aşağıda istenilen bilgileri bulup ekrana yazdıran programı C dilinde yazınız. - Her bir bölümün başlangıç adresi (0x ile başlayan hexodesimal formatta), - Her bir bölümün boyutu (byte cinsinden). Yol gösterme: Program istenmeyen bir şekilde sonlanmaması için signal’lardan istifade edebilirsiniz. Örnek çıktı: > ./soru1 Data bölümü : başlangıç= 0x123456fe, boyut= 8156345 Byte Yığıt bölümü: başlangıç= 0x62345623, boyut= 2156123 Byte Yığın bölümü: başlangıç= 0xb23456cde, boyut= 4156567 Byte Not: Yukarıdaki rakamlar farazidir.
Şu ana kadar yaptığım:
FILE *f = fopen("/proc/self/statm","r");
kodu ile şu an çalışan prosesten data bölümünü çekmek istedim. Ama doğru yolda mıyım ve data bilgisini nasıl çekeceğim hiçbir fikrim yok
/proc/pid/maps dosyasında bellek adresleri yer alır. İlk iş olarak bunu okuyarak başlayabilirsin. Aşağıda sistemde çalışan örnek bir processin bellek haritası.
/proc/pid/maps dosyasında bellek adresleri yer alır. İlk iş olarak bunu okuyarak başlayabilirsin. Aşağıda sistemde çalışan örnek bir processin bellek haritası.
Teşekkürler. Bu kısmı hallettim zaten heap ve stack kısmını aldım. Son olarak data kaldı. Data sanırım 2.satırdaki r--p yazan oluyor. Peki birden fazla r--p yazan satır varsa o zaman hepsinin boyutunun toplamı mı alınmalı data için ?
Data kısmı 2 ve 3 satırlardır. 2. satır başlangıçta değer ataması yapılan değişkenler, 3. satır ise atama yapılmayan değişkenlerin bellek bölümlerini gösterir.
Şu ana kadar yaptığım: kodu ile şu an çalışan prosesten data bölümünü çekmek istedim. Ama doğru yolda mıyım ve data bilgisini nasıl çekeceğim hiçbir fikrim yok