Memory ablesen

  • Ich versuche mit WinAPI.au3 eine bestimmt Adresse zu lesen und es dann in einer MsgBox anzeigen lassen.


    Mein simpler code dafür :



    Bei der Zeile _WinAPI_OpenProcess(BitOR(0x0400, 0x0010), False, ProcessExists("Tutorial.exe"))
    habe ich keine Ahnung ob da BitOR(0x0400, 0x0010) hingehört (ich habs von einem anderen thread im englischen Forum )


    0x00D027BC ist die Addresse die ich lesen will und Tutorial.exe das Programm


    Nun es kommen komische Werte raus :

    anstatt das die MsgBox 85 anzeigt, zeigt es: U

    für 80 zeigt es: P

    etc..


    Wie bekomme ich es hin das es 80 bzw 85 anzeigt anstatt U und P und was _kommt bei WinAPI_OpenProcess in den ersten Parameter und warum? (im meinem Beispile kommt BitOR(0x0400, 0x0010), aber ich hab keine ahnung warum , weshalb, wie gesagt habe ich es woanders gesehen)

    Einmal editiert, zuletzt von TheManiac4 (1. Mai 2008 um 15:13)

  • Hmm wenn ich Dec() benutze kommt jetzt nur noch 0 raus.


    und bei StringToHex() kommt die Meldung undefined Function


  • Mach mal das, und schau, wo das richtige steht:

    [autoit]

    $Res = DllStructGetData($pBuffer, 1)
    MsgBox(0,"","Dec(): "& Dec($Res) & @CRLF & "Dec(Hex()): " & Dec(Hex($Res)) & @CRLF "Original: " & $Res & @CRLF)

    [/autoit]
  • Also, sollte auch da das richtige rauskommen:

    [autoit]

    $Res = DllStructGetData($pBuffer, 1)
    MsgBox(0,"","Dec(Hex()): " & Dec(Hex($Res))

    [/autoit]
  • Hmm

    Code
    Dim $procHwnd = _WinAPI_OpenProcess(BitOR(0x0400, 0x0010), False, ProcessExists("Tutorial.exe"))
     
    Dim $pBuffer = DllStructCreate("byte[256]"), $iRead = 0
     
    _WinAPI_ReadProcessMemory($procHwnd, 0x00D027BC, DllStructGetPtr($pBuffer), 256, $iRead)
    
    $Res = DllStructGetData($pBuffer, 1)
    MsgBox(0,"","Dec(Hex()): " & Dec(Hex($Res)))


    Hmm jetzt kommt nur noch 0 raus, very strange, also Addresse ist 00D027BC und das Programm Tutorial.exe *verzweifle*

  • keine Ahnung ob das weiterhilft aber zum nächsten Code:


    Kommen folgende 4 MsgBox:

    http://img156.imageshack.us/img156/3697/33248347yd6.jpg


    http://img156.imageshack.us/img156/2977/54507041vm4.jpg


    und dann zweimal mit dem Wert 0.


    Der Fehler mit Value 0 ist immer noch nicht gefixed

  • Unverständlich.

    Das ist aufjedenfall schonmal die richtige MsgBox:

    [autoit]

    MsgBox(0,"","Dec(Hex()): " & Dec(Hex($Res)))

    [/autoit]

    Ich vermute mal, das $Res zwar ein BinärCode ist, aber irgendwie nicht als einer "erkannt wird". Das könnte passieren, wenn am Ende z. B. ein Leerzeichen ist, dann würde nämlich auch 0 kommen. (Reine Spekulation :))
    Überprüf das mal mit IsBinary.
    Wenn es kein Binärcode ist, kannst ja mal mit StringTrimRight rechts was abschneiden und überprüfen ob die letzte Zahl noch da ist.

  • Das kommt bei §Res raus:


    0x450000001E020000D8C54200AC24D0006436D

    00000000000000000000000000000000000000000000000000001000000222441003

    2244100AC24D00000000000DCE54200C427D00040000000E600000029000000110000

    00A000000000000001010101000000000001030000000000000046D000000000000F

    0000FF2846D0000000F4FF00000000000000000000000000000000000000000000000

    000000000000001000000000000000000000000000000000000000000000000000000

    000008AE44000000000000000000000000000000000000000000000000000000000000

    00000000000000000000000000000000000000000000000000000000000000

  • Du ließt zu viel aus:)
    Benötigen würdest du nur das: 0x45
    Verwedne doch mal 4 bytes statt 256

    [autoit]


    Dim $pBuffer = DllStructCreate("byte[4]"), $iRead = 0
    _WinAPI_ReadProcessMemory($procHwnd, 0x00D027BC, DllStructGetPtr($pBuffer), 4, $iRead)

    $Res = DllStructGetData($pBuffer,1)

    [/autoit]
  • Danke das hat geholfen, aber statt 4 bytes, musste ich mit 1 byte zufrieden geben sonst kommt falsches Ergebnis raus.


    Danke für eure Hilfe