CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - odczyt z bloku pamięci ram

odczyt z bloku pamięci ram

dział ogólny

Re: odczyt z bloku pamięci ram

Nowy postprzez moderasura » środa, 28 listopada 2012, 01:31

Witam może mi ktoś podpowiedzieć jak odczytać znaki z pamięci pętlą for i wyświetlić ją w komponencie Edit ? Kombinowałem już na wiele sposobów i jednak nie dam rady :)

KOD cpp:     UKRYJ  
DWORD  nick = 0;
DWORD  staticOffset27 = 0x75678e ;
 
 
for (int i; i < 4; i++) {

 ReadProcessMemory(handle, (LPCVOID)(baseAddr + staticOffset26+(i*2)), &nick,  sizeof(BYTE), &numBytesRead);
   Edit2->Text = char (nick) ;
      }
 


Pomoże mi ktoś to skumać :roll:
Avatar użytkownika
moderasura
Homos antropiczny
Homos antropiczny
 
Posty: 57
Dołączył(a): wtorek, 4 stycznia 2011, 20:07
Podziękował : 13
Otrzymał podziękowań: 0
System operacyjny: Windows-7 32 bit
Kompilator: C++ Borland 6
C++Builder 2009
Gadu Gadu: 0
    Windows 7Firefox

Re: odczyt z bloku pamięci ram

Nowy postprzez Cyfrowy Baron » środa, 28 listopada 2012, 10:43

Ale z czym masz konkretnie problem: z pobraniem znaków z pamięci, czy z ich prawidłowym wyświetleniem w Edit?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: odczyt z bloku pamięci ram

Nowy postprzez moderasura » środa, 28 listopada 2012, 11:30

Z odczytem nie ma problemu pobiera mi jeden znak ale jak to zrobic w pętli by pobierało mi wiecej znaków
Avatar użytkownika
moderasura
Homos antropiczny
Homos antropiczny
 
Posty: 57
Dołączył(a): wtorek, 4 stycznia 2011, 20:07
Podziękował : 13
Otrzymał podziękowań: 0
System operacyjny: Windows-7 32 bit
Kompilator: C++ Borland 6
C++Builder 2009
Gadu Gadu: 0
    Windows 7Firefox

Re: odczyt z bloku pamięci ram

Nowy postprzez Cyfrowy Baron » środa, 28 listopada 2012, 12:10

Przecież w każdym obiegu pętli wymieniasz zawartość Edit2 na nowy znak. Skoro pętla wykonuje się 4 razy i w każdym obiegu pętli wpisujesz coś do Edit2 to nowy wpis zastępuje stary. Do zmiennej nick też pobierany jest przecież tylko jeden znak z adresu.

Powinno być tak:

KOD cpp:     UKRYJ  
DWORD  nick = 0;
DWORD  staticOffset27 = 0x75678e ;
String result;
 
 
for (int i; i < 4; i++)
{
    ReadProcessMemory(handle, (LPCVOID)(baseAddr + staticOffset26+(i*2)), &nick,  sizeof(BYTE), &numBytesRead);
   
    result = result + String ( char (nick) );
}

Edit2->Text = result;

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
moderasura
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: odczyt z bloku pamięci ram

Nowy postprzez polymorphism » środa, 28 listopada 2012, 12:36

Dlaczego nick jest typu DWORD, jeśli chcesz czytać tylko bajt? Po indeksowaniu domniemam, że nick jest zapisany w znakach szerokich, zatem zamiast czytać po bajcie, powinieneś czytać wartości 16-bitowe lub po prostu typu wchar_t.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: odczyt z bloku pamięci ram

Nowy postprzez moderasura » środa, 28 listopada 2012, 22:04

Cyfrowy Baron napisał(a):Przecież w każdym obiegu pętli wymieniasz zawartość Edit2 na nowy znak [...]


Własnie sprawdzam ten kawałek kodu ale i tak coś nie działa :) chyba ze mam coś wczesniej w kodzie napaprane już lukam
Avatar użytkownika
moderasura
Homos antropiczny
Homos antropiczny
 
Posty: 57
Dołączył(a): wtorek, 4 stycznia 2011, 20:07
Podziękował : 13
Otrzymał podziękowań: 0
System operacyjny: Windows-7 32 bit
Kompilator: C++ Borland 6
C++Builder 2009
Gadu Gadu: 0
    Windows 7Firefox

Re: odczyt z bloku pamięci ram

Nowy postprzez moderasura » środa, 28 listopada 2012, 22:05

Wczytuje mi jeden ciąg znaków np mam w grze nick gangster a w programie mi czyta ggggggg nie wiem jakim cudem ale w pamieci mi zmienia z gangste na ggggggg.
Avatar użytkownika
moderasura
Homos antropiczny
Homos antropiczny
 
Posty: 57
Dołączył(a): wtorek, 4 stycznia 2011, 20:07
Podziękował : 13
Otrzymał podziękowań: 0
System operacyjny: Windows-7 32 bit
Kompilator: C++ Borland 6
C++Builder 2009
Gadu Gadu: 0
    Windows 7Firefox

Re: odczyt z bloku pamięci ram

Nowy postprzez Cyfrowy Baron » czwartek, 29 listopada 2012, 00:02

Ja tym bardziej nie wiem. Sprawdź na innym programie czy kod działa prawidłowo i jeżeli tak to poszukaj informacji o tej grze. Inni pewnie już też tego próbowali, więc może będą wiedzieć coś więcej.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: odczyt z bloku pamięci ram

Nowy postprzez moderasura » czwartek, 29 listopada 2012, 10:16

Ok już wszystko działa twój kod Baronie jak najbardziej poprawny :D
Avatar użytkownika
moderasura
Homos antropiczny
Homos antropiczny
 
Posty: 57
Dołączył(a): wtorek, 4 stycznia 2011, 20:07
Podziękował : 13
Otrzymał podziękowań: 0
System operacyjny: Windows-7 32 bit
Kompilator: C++ Borland 6
C++Builder 2009
Gadu Gadu: 0
    Windows 7Firefox

Re: odczyt z bloku pamięci ram

Nowy postprzez moderasura » sobota, 1 grudnia 2012, 11:48

polymorphism napisał(a):Dlaczego nick jest typu DWORD, jeśli chcesz czytać tylko bajt? Po indeksowaniu domniemam, że nick jest zapisany w znakach szerokich, zatem zamiast czytać po bajcie, powinieneś czytać wartości 16-bitowe lub po prostu typu wchar_t.


Dlatego ze w programie pobieram i zapisuje nie tylko znaki ale i tez inne wartości ;) dlatego wszystko mam w DWORD po to aby sie nie pogubić w tym całym kodzie, bo jest tego masa, jakieś 60 adresów w pamieci które czytam i zapisuje :shock:
Avatar użytkownika
moderasura
Homos antropiczny
Homos antropiczny
 
Posty: 57
Dołączył(a): wtorek, 4 stycznia 2011, 20:07
Podziękował : 13
Otrzymał podziękowań: 0
System operacyjny: Windows-7 32 bit
Kompilator: C++ Borland 6
C++Builder 2009
Gadu Gadu: 0
    Windows 7Firefox

Re: odczyt z bloku pamięci ram

Nowy postprzez polymorphism » sobota, 1 grudnia 2012, 12:33

dlatego wszystko mam w DWORD po to aby sie nie pogubić w tym całym kodzie, bo jest tego masa

Paradoksalnie takie podejście powoduje to, że się w tym wszystkim gubisz ;) Dobry i czytelny kod dzieli się na funkcję lub nawet na jakieś logiczne bloki. Zmienne powinny mieć sensowne, coś mówiące nazwy. Typy też powinny być dobierane zgodnie z ich przeznaczeniem.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: odczyt z bloku pamięci ram

Nowy postprzez Cyfrowy Baron » sobota, 1 grudnia 2012, 13:47

Tutaj bym się zgodził z polymorphism. Nawet jeżeli pobierasz raz np. łańcuch znaków a drugi raz liczbę, to możesz przecież stworzyć sobie do tego funkcje. Co ciekawe funkcje mogą mieć te same nazwy, ale różne argumenty lub zwracać różne wartości, to się nazywa przeciążeniem funkcji. W ten sposób nie pogubisz się w kodzie, a używanie takich funkcji będzie proste. Można by pójść dalej i skorzystać z funkcji ogólnych (template), o ile jest to oczywiście uzasadnione.

Co się zaś tyczy uwag polymorphism to jak już coś proponujesz to fajnie by było, gdybyś sklecił kawałek kodu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: odczyt z bloku pamięci ram

Nowy postprzez moderasura » sobota, 1 grudnia 2012, 14:07

Postaram się zapamiętać wasze uwagi na przyszłość ;)
Avatar użytkownika
moderasura
Homos antropiczny
Homos antropiczny
 
Posty: 57
Dołączył(a): wtorek, 4 stycznia 2011, 20:07
Podziękował : 13
Otrzymał podziękowań: 0
System operacyjny: Windows-7 32 bit
Kompilator: C++ Borland 6
C++Builder 2009
Gadu Gadu: 0
    Windows 7Firefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 8 gości