1. sayfa
|
neden ki teğmenim? ne yanlışlık yaptımda böyle eğleniyorsunuz? |
|
C derleycisinde peekb diye bişey var okumak için ama onuda visual studio C++ da çalıştıramadım hata verdi tanımlı değil galiba. readprocessmemory diye bir örnek var internette ama benim aradığım o değil. hazı api kullanmak istemiyorum. ben işin dibini görmek istiyorum. |
| bence bir belleğin çalışma şeklini öğren ondan sonra yapman daha iyi olacaktır. |
|
savan.avi ... |
|
galiba yanlış forumda araştırıyorum :) cevap bu. biri bilgisayardan anlamadığımı yazmış biri ramlerin yapısını öğren demiş. bilgisayarla alakalı bir bölümden mezunum meraklanma sadece biraz sistem programlamaya uzağım artık bu işi yapabilmek için çok detaylı ram bilgisi bilmeye gerek yok. |
Bu çok temel bir konu, onun için öyle demişler heralde. Çok görevli işletim sistemleri başkasının kullandığı bellek bölgesine erişmene izin vermez (korumalı mod). Öyle olsaydı senin yaptığın bir hatadan dolayı başka bir program çökerdi veya başka programdaki en kritik bilgileri rahatlıkla okuyabilirdin. Senin okuduğun yer programına tahsis edilen yığın bölgesi ve işe yaramaz çöp değerler. İstediğin şey ancak tek görevli sistemlerde işe yarar, dos gibi. |
|
tahmin ettim heap ya da stack tan okuduğumu. acaba nasıl okuyabilirim bilgin var mı? assembly ya da C ile nasil yapabilirim mümkün mü? |
|
Bildiğim kadarıyla bunun bir yolu yok. Bellek koruması hem işletim sis. hem de cpu tarafından sağlanıyor. Programındaki bellek adresleri fiziksel değil sanal. Bellekte serbestçe dolaşmak sadece gerçek modda yapılabilir ama onda da en fazla kullanılabilen bellek 1mb (olması lazım). Assembly falan hikaye. Mümkün ise sadece işletim sis. alt düzey api fonksiyonlarıyla mümkün olabilir. ReadProcessMemory ve WriteProcessMemory diye bişeyler gördüm ama bunlar karşılıklı çalışan alt process ler için geçerli sanırım. Yine de kerneli hack lersen belki olur. Kısaca kural şu. Programının erişebileceği bellek sadece kendisine tahsis edilen bellektir. |
| teşekkür ederim. |
1. sayfa
---------------------------------------------------
#include<stdio.h>
#include<conio.h>
int main()
{
long int sayac;
int *p;
int a;
p = (int *)(&a-&a);
//p=p-p;
printf("%p\n",&a);
printf("%p\n",p);
printf("\n\n");
for(sayac=1;sayac<20;sayac++)
{
printf("%d\n",*(p+sayac));
}
_getch();
}
--------------------------------------------
amacım ramdan 0x00000000 adresinden başlayarak veri okumak. normal da bir "a" değişkeni oluşturup o "a" değişkeninin altından üstünden yüzlerce hatta binler bellek lokasyonunda o anda ne var okuyabiliyorum. ama istediğim bellek lokasyonundan okumak isteyince hata veriyor. Acaba işletim sistemimi izin vermiyor?
ben heralde "stack" veya heap bölgesinde ki bellek lokasyonlarını okuyabiliyorum. o anda çalışan programların kodlarına erişmeye çalışınca windows izin vermiyor. doğru muyum ? :)
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.