Einzelnen Beitrag anzeigen

brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#5

Re: DLL Function fungiert anders als "direkte".

  Alt 1. Okt 2008, 22:46
Der Code ist echt unsauber programmiert. WinAPIs haben doch Rückgabvewerte auf die man prüfen sollte. Eine Exception kann nur noch bei der Division (durch 0) auftreten. Und wenn du statt einem Single Real nimmst kommt ein ganz anderes ergebnis raus. Das macht absolut keinen Sinn was du da dann machst. Ich denke der Code stammt nicht von dir oder? Du liest außerdem aus einem dynamsichen Speicherbereich die Daten aus, was auch nicht wirklich "sauber" ist.

Irgendwie so würds jetzt umgewandelt aussehen (habs heir im Editor programmiert )

Delphi-Quellcode:
function get_x(pid: Integer; offset_base: DWord; offset: Dword = $7C; Divider: Double = 10.0): Integer;
var
  BaseAddress : DWord;
  xRegionFloat : Single;
  hProcess : THandle;
  rBytes : Cardinal;
  PositionInt : Byte;
begin
  Result := 0;
  if Divider <> 0 then
  begin
    hProcess := OpenProcess(PROCESS_VM_READ,False,pid);
    if hProcess <> 0 then
    begin
      if ReadProcessMemory(hProcess, Pointer(offset_base), @baseAddress, SizeOf(baseAddress), rBytes) and
        (rBytes = SizeOf(baseAddress)) and
        ReadProcessMemory(hProcess, Pointer(baseAddress + offset), @xRegionFloat, SizeOf(xRegionFloat), rBytes) and
      (rBytes = SizeOf(xRegionFloat)) and
        ReadProcessMemory(hProcess, Pointer(baseAddress + offset+4), @PositionInt, SizeOf(PositionInt), rBytes) and
      (rBytes = SizeOf(PositionInt)) then
        result := Round(xRegionFloat / Divider + (PositionInt* 3 - $195) shl 6));
    end;
  end;
end;
Edit:
Du versuchst jetzt nicht seit 7 Monaten einen Cheat/Bot für Silkroad zu erstellen oder ^^
  Mit Zitat antworten Zitat