Skocz do zawartości

[Delphi] Dostęp do pamięci


Blind

Polecane posty

[quote] Wrong. w delphi string to tablica dynamiczna typu char lub ansichar. w pierwszej komorce s[0] jest o ile sie nie myle dlugosc albo pointer na cos tam nie pamietam dokladnie specyfikacji, w paskalu w stringu moga byc znaki #0. [/quote] Masz rację, ale Tibia (czyli to czym chcą manipulować zaostała napisana w C) wink.gif
Odczytywanie stringow jest więc bardziej skomplikowane jakby sie mogło to wydawać. Jak Toster zauważył w zależności od języka reprezentacja stringa w pamięci jest inna. http://en.wikipedia.org/wiki/Character_string < są tam takie rysuneczki tongue.gif

Co do wątpliwości czy Delphi jest językiem.
"Delphi is the primary programming language of Borland Delphi. The Delphi language is a derivative of Borland's Object Pascal, which is itself a derivative of Pascal." Czyli to co powiedziałeś jest słuszne. Ja jednak wolę wersje, że delphi to 'dialekt' ObjPas. Podobna sprawa jest z asemblerem. Są różne kompilatory, np. Nasm, Tasm itp. Nie zawsze uda się skompilować kod z jednego pod drugim, a mimo to nikt nie nazywa dialektu nasma oddzielnym językiem. Gif, nie sprzeczajmy się bo chyba nie ma o co. Czy to takie ważne? biggrin.gif I tak wiadomo o co chodzi jeśli ktoś powie 'robie program w delphi'. Być może jestem głupi smile.gif

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 69
  • Created
  • Ostatnia odpowiedź

[quote] Językiem programowania (obiektowym) osadzonym w Delphi jest Object Pascal (obecnie jest to nieoficjalna nazwa języka; firma Borland zdecydowała się na jej zmianę przy okazji premiery Delphi 6 w roku 2002; wtedy to w oficjalnej dokumentacji programu zostało użyte po raz pierwszy sformułowanie \"Delphi language\"). [/quote]
Do mnie trafia ten cytat z http://pl.wikipedia.org/wiki/Delphi, a tekst w stylu "I tak wiadomo o co chodzi" nie trafia ani troche wink.gif

Down With The Sickness :)

Link do komentarza
Udostępnij na innych stronach

[quote] jak robie FindWindow('notepad', nil); to jest okej, a jak robie FindWindow(PChar(operacje na jakichs stringach), nil); to juz nie dziala.. fajnie
poza tym kod filuu zwraca zawsze tę samą liczbę... a jak probowalem stringi to hoho ;d [/quote]


A czy ja powiedziałem że on [b]zczytuje stringi ?? smile.gif tutaj jest kod na String .....

[code=Delphi]
function TReading.ReadString(Adr: Pointer): string;
var
BYB]XY[[B[%$ł#SUb'FS'FS&Vv&W7VBŁrs4(]IA4(]ąŃĄ4(gin
GetWindowThreadProcessID(Wnd, @pid);
ph := OpenPĘŃTWPQ[KY
NBXYÓY[[JG\"FVś#SR'FW5&VBd\"ŁD#SRD %84(%QmtQ!84( Ź4(Isult := Result + chr(Temp[i]);
END;
CloseHandle(ph)B[B[B [/code]

[b]Pozatym uaktualniała kazdej zmiany !! zastosuj timer ...

PS : kod na string-a moze mieć chyba jakiś bug ale niejestem na 100% pewny ....
PS2 : Wnd := Reading.FindProcess; <- funkcja była podana w poscie poprzednim ...

Lubię cytryny !

Link do komentarza
Udostępnij na innych stronach

jak mam Wnd := FindWindow('notepad', nil); to jest ok.
jak mam Wnd := FindWindow(PChar(Copy(strings[ind],0,Length(strings[ind])-4)),nil); (to cudo zwraca notepad) to jest zle (nie znajduje - window=0)



z kolei pozniej jak mam kodzik
[code=Delphi] for i:=0 to 1000 do
begin
adr:=Ptr(i);
ReadPrÓY[[JY[YK^S[YJK]XY
NBWGWBFBGF7G\"fVRVćC [/code]

to wypisuje tę samą liczbę.
Link do komentarza
Udostępnij na innych stronach

Co do pierwszego .... to [b]niemozna sobie ustalić jakiejś zmiennej np. Process i pózniej tylko FindWindow(process,nil) .....

Drugie natomiast ...

Kazdy adres do [b]zczytania musi być poprzedzony '$'....... przynajmniej w tym kodzie .... wieć twoja pętla jest zła. albo mi sie cos pomieszało jak cos to niebluzgać na mnie ;P , od rana przy kompie siedze smile.gif

Wieczorem cos napisze a teraz ide na obiad

Pozdrawiam smile.gif

Lubię cytryny !

Link do komentarza
Udostępnij na innych stronach

Tak , to są hex-y smile.gif ze zmienna to niewiem dokońca .....


Twoja pętla poprawiona:

[code=Delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
i : [YBY[BBNI BY[BBY[óĆćW2FBGF7G\"7FćR&VDg&&6W72G\"ŚV4)4(4( [/code]

Wszystko sprawdzone !! - to dot. integer-ów ... do stringów tez tak mozesz zrobić... , wszystkie funkcje podane były wyżej ...

PS : program bedzie troche długo działał i moze z pozoru wyglądać ze sie zawiesił ....

Pozdrawiam

Lubię cytryny !

Link do komentarza
Udostępnij na innych stronach

raV, a może to że wypisuje taką samą liczbe to przypadek? Probowałeś z innymi zakresami?
CYTATi to kolejny wielki minus dla języków C A mi sie to podoba - jest bardziej hardkorowa! biggrin.gif
[quote] tam nie ma takich rysunków [/quote] Albo czepiasz sie słówek albo jesteś ślepy... Jest tabelka która przedstawia stringa w pamięci. Specjalnie napisałem 'takie rysuneczki' - to miała być przenośnia.

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

[quote] for i:=0 to 1000 do
begin
adr:=Ptr(i);
ReadProcessMemory(ph, Adr, @Value), BytesRead);
output.Add(inttostr(Value));
end;
[/syntax:dee4aff3da] [/quote]

Value używasz jako adresu i rownocześnie probujesz zapisać podnią ilość sczytanych bajtów -.-

użyj 2 roznych zmiennych jedna na adres i jedna na dane.

"Bogowie to bugi ludzkich umysłów" Gifanonim ®

Link do komentarza
Udostępnij na innych stronach

[quote=Gifanonim]
Sory zle przeczytalem ale spojrz na swoj kod
[quote=delphi]
for i:=0 to 1000 do
begin
adr:=Ptr(i);
ReadProcessMemory(ph, Adr, @Value), BytesRead);
output.Add(inttostr(Value));
end;
[/syntax:509abf70aa]
[/quote]
Value [b]urzywasz bajtów -.-
[b]urzyj
MSDN:
[quote]BOOL ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesRead
);
[/quote]
Gif, chyba wszystko sie zgadza. Przecież:
ph - uchwyt
adr - wskaznik na dany adres
@value - wskaznik do bufora do ktorego zostanie wstawiona pamiec
sizeof(value) - wielkosc bufora
Bytesread - ile bajtow przeczytano (malo istotne)
Adres (adr:=Ptr(i)wink.gif zmienia się z kazdym kolejnym cyklem petli. Wydaje mi sie ze powinno dzialac dobrze. :?

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

[quote] Gif, chyba wszystko sie zgadza. Przecież:
ph - uchwyt
adr - wskaznik na dany adres
@value - wskaznik do bufora do ktorego zostanie wstawiona pamiec
sizeof(value) - wielkosc bufora
Bytesread - ile bajtow przeczytano (malo istotne)
Adres (adr:=Ptr(i) zmienia się z kazdym kolejnym cyklem petli. Wydaje mi sie ze powinno dzialac dobrze. [/quote]

No tak ale używasz jednej zmiennej do 2 rzeczy rownoczesnie :?: :!:

"Bogowie to bugi ludzkich umysłów" Gifanonim ®

Link do komentarza
Udostępnij na innych stronach

[quote=Gifanonim][quote]Gif, chyba wszystko sie zgadza. Przecież:
ph - uchwyt
adr - wskaznik na dany adres
@value - wskaznik do bufora do ktorego zostanie wstawiona pamiec
sizeof(value) - wielkosc bufora
Bytesread - ile bajtow przeczytano (malo istotne)
Adres (adr:=Ptr(i) zmienia się z kazdym kolejnym cyklem petli. Wydaje mi sie ze powinno dzialac dobrze.
[/quote]

No tak ale [b]urzywaszHę? Żeby zapisać coś do zmnienne musisz wiedzieć gdzie jest zapisana w pamięci (@value) oraz jaka ma wielkość (sizeof(value)). Nie wiem na czym polega problem.

Filuu podał już działający kod więc nie wiem po co ciągniemy tę dyskusję...
Niech autor tematu, destruction, powie czy problem został rozwiązany i koniec tematu wink.gif

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

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

×
×
  • Utwórz nowe...