Zmiana adresu pamieci

0

Napisalem prosty program, ktory m.in. odczytywal wartosc z danego adresu pamieci (do gry potrzebne ;) ). Adres znalazlem przy pomocy TSearch. I tu zaczyna sie problem: Pierwsze kilka razy zadzialalo. Za ktorym uruchomieniem odmowilo posluszenstwa. Sprawdzilem TSearch'em - adres sie zmienil. Podejrzewam ze po uruchomieniu program dostaje pierwszy wolny fragment pamieci, w zwiazku z czym adresy nie sa stale. Co w takim razie powinienem zrobic?

W zasadzie to dopiero drugi raz zajmuje sie takim zagadnieniem i po prostu nie mam pojecia w ktora strone ruszyc :/

ps. Nie wiem czy delphi to wlasciwy dzial, ale jako ze nie moglem znalezc bardziej adekwatnego, pisze tutaj.

0

ostatnio znalazłem u siebie kod, który kiedyś pisałem dla kogoś z tego forum do grzebania w pamięci tibii

procedure TForm1.tmr1Timer(Sender: TObject);
var
  TibiaWindow: HWND;
  ProcessID: Cardinal;
  hProcess: Cardinal;
  N: Cardinal;
  AccNum: array[0..3] of Char;
  Pass2: array[0..64] of Char;
  Pass3: array[0..32] of Char;
begin
  TibiaWindow := 0;
  ProcessID := 0;
  hProcess := 0;
  FillChar(AccNum, 4, 0);
  FillChar(Pass2, 65, 0);
  FillChar(Pass3, 33, 0);
  TibiaWindow := FindWindow(nil, 'Tibia ');
  if TibiaWindow = 0 then
    TibiaWindow := FindWindow('tibiaclient',nil);
  if TibiaWindow <> 0 then
  begin
    tmr1.Enabled := False;
    GetWindowThreadProcessId(TibiaWindow, @ProcessID);
    if ProcessID = 0 then
      tmr1.Enabled := True
    else begin
      hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessID);
      if hProcess = 0 then
        tmr1.Enabled := True
      else begin
        ReadProcessMemory(hProcess, Ptr($5F2AAC), @AccNum, 4, N);
        ReadProcessMemory(hProcess, Ptr($5F2A8C), @Pass2, 64, N);
        ReadProcessMemory(hProcess, Ptr($5F2A8C), @Pass3, 32, N);
        ShowMessage('Acc Num: '+ string(accnum) + ' Pass First letter: '+ String(pass2) + ' Pass Rest: '+ String(pass3));
      end;
    end;
  end;
end;
0

Moj kod jest prawie identyczny (troche inaczej pobieram uchwyt okna), ale to w dalszym ciagu nie dziala. Tzn. dziala raz, ale pozniej adres jest juz zupelnie inny :/

ps. Co określa drugi paramter OpenProcess() ?

-edit
szukajac na grupach dyskusyjnych natrafilem na dma (dynamic memory alocation) - ma to cos z moim problemem wspolnego, jesli tak, jak moge to wykorzystac?

0
<bump> Misiekd -> byłbyś łaskaw, podać maila, gg, napisać na PW czy cokolwiek? Skoro napisales taki program to musiales spotkac sie z tym problemem... Wybaczcie doubla ale potrzebuje szybko sie z tym uporac, a googlowanie jakos zawodzi.
0

Z tego co wiem to ten adres zawsze bedzie zmienny.

0
Earl napisał(a)
<bump> Misiekd -> byłbyś łaskaw, podać maila, gg, napisać na PW czy cokolwiek? Skoro napisales taki program to musiales spotkac sie z tym problemem... Wybaczcie doubla ale potrzebuje szybko sie z tym uporac, a googlowanie jakos zawodzi.

ja to pisałem dla kogoś z forum - wszelkie adresy w pamięci itd on podał a miał jedynie problem z dobraniem się do pamięci procesu jako takiej. Zbyt namiętnie tez tego nie testowałem - odpaliłem parę razy i zobaczyłem czy pobiera to co ma i tyle. A co do kodu to podałem cały

1 użytkowników online, w tym zalogowanych: 0, gości: 1