Jump to content

Archived

This topic is now archived and is closed to further replies.

Dexarz

[TPascal] Program Pamięć.exe

Recommended Posts

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 ..

Share this post


Link to post
Share on other sites

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...

Share this post


Link to post
Share on other sites

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ę..

Share this post


Link to post
Share on other sites

lol, o czym ty piszesz? moze bys sobie poczytal troche na ten temat a nie wyciagal wnioskow ze zle napisanych programow.

Share this post


Link to post
Share on other sites

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:

Share this post


Link to post
Share on other sites

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 ^^

Share this post


Link to post
Share on other sites

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ąć ...

Share this post


Link to post
Share on other sites

×
×
  • Create New...