_MemoryPointerRead von Nomad unter XP Problem

10/01/2009 18:25 schlat#1
Hi,

weiss zufällig jemand ob es Probleme mit der Funktion _MemoryPointerRead(..) von der Nomad.au3 unter win XP gibt?
Bekomme leider keine Werte zurück bzw. sieht es so aus als berechnet er die neue Adresse mit den Offsets in der funktion falsch.

Unter Win 7 und Vista läuft das Script einwandfrei.

Danke schon mal im voraus.

-->>> meine memoryGetBaseAddress() function war fehlerhaft. Mit Local $iv_Address = 0x400000 wird man auch unter xp ein bissle mehr glücklich...
10/01/2009 19:29 SCORNI#2
also bei mir geht es auch auf xp
10/01/2009 19:55 schlat#3
Quote:
Originally Posted by SCORNI View Post
also bei mir geht es auch auf xp
benutzt du _memorygetbaseadress oder bastelts du dir das selber zusammen?
Denke mittlerweile auch nicht mehr das es die memorypointerread() mein problem ist. Bekomme schon eine falsche basisadresse zurück, folglich kann da nur mist rauskommen.
10/01/2009 21:26 Frezee#4
Quote:
Originally Posted by schlat View Post
Hi,

weiss zufällig jemand ob es Probleme mit der Funktion _MemoryPointerRead(..) von der Nomad.au3 unter win XP gibt?
Bekomme leider keine Werte zurück bzw. sieht es so aus als berechnet er die neue Adresse mit den Offsets in der funktion falsch.

Unter Win 7 und Vista läuft das Script einwandfrei.

Danke schon mal im voraus.

-->>> meine memoryGetBaseAddress() function war fehlerhaft. Mit Local $iv_Address = 0x400000 wird man auch unter xp ein bissle mehr glücklich...
setz vor dein Script #Require Admin dann klappts.
Wenn es dann immer noch ned geht musst du deine Pointer selber ausrechnen.


€: ich hab den thread grade aus versehen falsch reported... ;<
10/02/2009 04:41 schlat#5
Quote:
Originally Posted by Frezee View Post
setz vor dein Script #Require Admin dann klappts.
Wenn es dann immer noch ned geht musst du deine Pointer selber ausrechnen.


€: ich hab den thread grade aus versehen falsch reported... ;<

k kein problem...habs selber gelöst und funktioniert. Für die es interessiert kann ich auch die angepasste memoryGetBaseAddress posten. Die Ehre der Funktion gilt naturlich nicht mir....

Code:
;===================================================================================================
; Function........:  _MemoryGetBaseAddress($ah_Handle, $iHD)
;
; Description.....:  Reads the 'Allocation Base' from the open process.
;
; Parameter(s)....:  $ah_Handle - An array containing the Dll handle and the handle of the open
;                                 process as returned by _MemoryOpen().
;                    $iHD - Return type:
;                       |0 = Hex (Default)
;                       |1 = Dec
;
; Requirement(s)..:  A valid process ID.
;
; Return Value(s).:  On Success - Returns the 'allocation Base' address and sets @Error to 0.
;                    On Failure - Returns 0 and sets @Error to:
;                       |1 = Invalid $ah_Handle.
;                       |2 = Failed to find correct allocation address.
;                       |3 = Failed to read from the specified process.
;
; Author(s).......:  Nomad. Szhlopp.
; Edit............;  Schlat(only starting address handling....honor above)
; URL.............:  http://www.autoitscript.com/forum/index.php?showtopic=78834
; Note(s).........:  Go to Www.CheatEngine.org for the latest version of CheatEngine.
;===================================================================================================
Func _MemoryGetBaseAddress($ah_Handle, $iHexDec = 0)
   
    Local $iv_Address = 0x400000
    Local $v_Buffer = DllStructCreate('dword;dword;dword;dword;dword;dword;dword')
    Local $vData
    Local $vType
   
    If Not IsArray($ah_Handle) Then
        SetError(1)
        Return 0
    EndIf
   

    DllCall($ah_Handle[0], 'int', 'VirtualQueryEx', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer))
   
    If Not @Error Then
       
        $vData = Hex(DllStructGetData($v_Buffer, 2))
        $vType = Hex(DllStructGetData($v_Buffer, 3))
       
        While $vType <> "00000080"
            DllCall($ah_Handle[0], 'int', 'VirtualQueryEx', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer))
            $vData = Hex(DllStructGetData($v_Buffer, 2))
            $vType = Hex(DllStructGetData($v_Buffer, 3))
            If Hex($iv_Address) = "01000000" Then ExitLoop
            $iv_Address += 65536
            ConsoleWrite($vType)
        WEnd

        If $vType = "00000080" Then
            SetError(0)
            If $iHexDec = 1 Then
                Return Dec($vData)
            Else
                Return $vData
            EndIf
           
        Else
            SetError(2)
            Return 0
        EndIf
       
    Else
        SetError(3)
        Return 0
    EndIf
   
EndFunc   ;==>_MemoryGetBaseAddress