Skocz do zawartości

[TPascal] Program Pamięć.exe


Dexarz

Polecane posty

Ostatnio nudziło mi się ,a że nie chce mi sie jeszcze dokończać Stick's Adventure 3 i Argenty to napisałem sobie prosty program/debugger .Wiem że może nazwa nie pasuje (nazwa debugger) ,ale nie wiem jak mam to inaczej traktować ...

 

 

Program do pobrania ztąd :)

 

Program jest pod dosem ,pisany w Turbo Pascalu (w delphi musiałbym sie bawić asmem ,bo nie ma tablicy mem[] ,próbowałem napisać ,ale ciągle był komunikat access violation ,wiec dałem sobie spokój)

 

"Komunikacja" z programem odbywa się wpisując komendy ,a oto ich opis:

 

Exit - Wyjście z pogramu,

Ready - Wyświetla na ekranie zawartość pamięci od naszego segment:offset (możemy wyświetlać różną ilość pamięci);

Get - Zapisuje do pliku zawartość pamięci (segment:offset 12 liczb hex + ich char w ASCII)

Set - Edycja poszczególnej komórki pamięci (Z tą opcja ostrożnie ,bo można sobie jeszcze coś narobić w wektorach przerwań jeśli nie wiemy gdzie co jest)

Hex - Zamienia liczbę dziesietną na hexadecymalną (liczby w zakresie Word czyli 0 do 65535 włącznie);

 

I to bu było na tyle ...

 

Pozdrawiam

 

 

PS. Ciekawe że napisałem segment:offset 12 licz hex + char w ASCII .Jakby co mówcie jeśli nie wiecie o co chodzi ..

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Fantastycznie, ale nie wiem czy zauważyłeś - ten program działa w emulowanym przez Windows środowisku DOS...

Wcale nie grzebiesz po ogólnej pamięci, tylko po pamięci tego emulowanego DOS`a i własnego programu :lol:

Mówiłem że tego nie napiszesz tak jak chciałeś i mamy tutaj protezę :-)

 

Wiesz, ucz się i pisz te softy, ale nie na narzędziach sprzed 20 lat...

Obrazek
Link do komentarza
Udostępnij na innych stronach

Wiem o tym ,domyśliłem się ..Ale skoro mogę wyświetlić gdzie jest katalog system32 ,to to już do dosa nie należy... zeskanuj sobie pierwsze 12 segmentów ,a zobaczysz że znajdziesz tam katalog gdzie jest system32...

 

Niekoniecznie tylko po samej pamięci dosa ..skoro zapisałem do pliku zawartość ostatnich segmentów z mojej pamięci czyli tak około 4094 do 4096 to jest pod koniec pamięci ,a mój program nie zajmuje nawet 20 kilobajtów ,czyli na pewno korzysta z mniej niz 5-6 segmentów ..Zauważ że liczba segmentów jest stała ,a mówiąc jeszcze że każdy segment jest wielkości 64 kb to można sie domyśleć (policzyć) i le ich jest ...W moim przypadku jest to 4096 ,bo 4096*64 daje 262144 czyli 256 megabajtów ...

 

Widziałeś ten napis PSP w programie ??To jest Program Segment Prefix czyli prefix segmentu dzie znajduje sie program.A widziałeś ile on wynosi ??U mnie raczej jest to stałe (jeśli właczam świeżo po uruchomieniu dosa) i wynosi zawsze $0762 ,u ciebie pewnie to inna wartość ale jak widzisz jest to $0762 (u mnie jest to gdzieś blisko tych 256 mega) ..Jeśli to co twierdzisz jest prawdziwe to na pewno było by to gdzieś w okolicach $050-100 ...

 

Wiem że mogę się mylić ,ale raz probowałem zapisać całą swoją pamięć w pliku i wiesz co osiągnąłem ??Plik wielkości 600 mega (na dysku ,tak naprawdę to prawie 1,2 giga) ,którego nie mogłem otworzyć nigdzie (za duży ) ...Gdyby to co mówisz było prawdą DOS walnąłby mi error że odwołuje się poza dostępną jego pamięć ...Ale może i masz racje ,a Dexarz znów się myli ...

 

 

Jeśli masz rację ,to prosiłbym napisać mi jak mogę to napisać w Windowsie ...Jeśli oczywiście chcesz i sie mylę..

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

lol Blind, jak możesz!

 

przecież on ma dostęp do każdego bita ze swoich 2147483648!

 

Hehe

 

Pozdrawiam!

 

PS Dexarz - jak nie możesz otworzyć pliku o dużym rozmiarze to sobie napisz program,

 

który będzie Ci otwierał wybrany fragment, hihi.

 

PS ...z pod wybranego offsetu...

 

PS a może frytki do tego... :rolleyes:

Link do komentarza
Udostępnij na innych stronach

Polecam trochę poczytać o DOSie i dlaczego teraz jest co najwyzej emulowany w okienku.

W 16 bitach segment i offset maja bo 16 bitow, czyli max wartość to 65536. Użycie jednego wystarczyło by na zaadresowanie 64kb pamięci, co jest za mało.

Producenci CPU wymyślili, aby 'prawdziwy' adres w pamięci obliczać jako: segment<<4 + offset - czyli segment*16+offset. Można obliczyć, że wtedy dostępna pamięć wynosi 1MB. Dlaczego razy 16? Wtedy następny segment może wskazywać na obszar pamięci tylko 16b dalej. Gdyby tak nie było i było by 2^16 segmentów 2^12 bajtowych, DOS traciłby masę pamięci na programy mniejsze niż 64kb.

 

DOS w okienku nie ma dostępu do systemowej pamięci itd. Jest to sztucznie zrobione środowisko, żeby starsze programy czuły się jak w DOSie.

 

Chcesz napisać debuger? ReadProcessMemory na MSDNie

 

Sory, troche sie duzo napisalo ^^

Link do komentarza
Udostępnij na innych stronach

Nic nie szkodzi ..Faktycznie Segmentx16+Offset to właśnie prawdziwy fizyczny adres komórki ...

 

Tylko gdzie to windoza zatrzymuje tę emulowaną pamięć ??

 

 

Własciwie masz rację ,jak włączyłem sobie masę programów ( w tym firefox ,który wtedy zżerał mi 80 MB pamięci czyli 1/3 całej mojej pamieci) i włączyłem mój program to psp nadal był taki sam ...

 

Przynajmniej coś sie nauczyłem ;) ...

 

Oj blind ;) ..Xevil ,tak dołącz frytki do tego :) A co do programu ,to poco ??Skoro jest funkcja ready ??Dobra temat można zamknąć ...

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...