|
You last visited: Today at 08:44
Advertisement
Pointer und Offsets?
Discussion on Pointer und Offsets? within the AutoIt forum part of the Coders Den category.
08/04/2013, 14:44
|
#1
|
elite*gold: 68
Join Date: Feb 2011
Posts: 401
Received Thanks: 96
|
Pointer und Offsets?
Hallo ich habe ein project für ein spiel aber ich kenne micht nicht mit offsets aus.
Wie kan ich das jetzt benutzen ?
Meiner example code:
Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <NomadMemory.au3>
#include <ProgressConstants.au3>
$ActualHP = 0x007E6938
$ofset1=0xAC
$ofset2=0x48
Global $Open = _MemoryOpen(ProcessExists("NostaleX.dat"))
$valueAd=_MemoryRead($ActualHP+$ofset1, $Open)
$curValue=_MemoryRead($valueAd+$ofset2, $Open)
Msgbox(64,"Actual HP",$curValue)
aber bei der msgbox komt "0" und nicht actual hp warum ?
die adressen & offsets die ich habe
MAX HP = 007E6938 Offset1:AC Offset2:48
CURRENT HP = 007E6938 Offset1:AC Offset2:4C
|
|
|
08/04/2013, 16:06
|
#2
|
elite*gold: 235
Join Date: Jan 2012
Posts: 920
Received Thanks: 377
|
Für Pointer gibt es die Funktion _MemoryPointerRead.
Dort kannst du die Offsets als Array übergeben.
Das kannst du dir auch einmal durchlesen:
|
|
|
08/04/2013, 22:11
|
#3
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
|
Du addierst auf die Adresse das Offset. Das ist falsch. Du musst das Offset auf den ausgelesenen Wert addieren. Oder einfach Funktionen verwenden die Pointer "unterstützen".
Code:
#AutoIt3Wrapper_UseX64=n
#RequireAdmin
#include <KDMemory.au3>
$lpBaseAddress = 0x007E6938
Dim $lpOffsets[2] = [0xAC, 0x48]
$szProcessName = "NostaleX.dat"
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId == 0 Then
MsgBox(48, "Error", "Process doesn't exists!")
Else
$phHandles = _KDMemory_OpenProcess($dwProcessId)
If @error Then
MsgBox(48, "Error", "Can't open " & $szProcessName & "! @error: " & @error)
Else
$lpMemoryData = _KDMemory_ReadProcessMemory($phHandles, $lpBaseAddress, 'DWORD', $lpOffsets)
If @error Then
MsgBox(48, "Error", "Can't read memory! @error: " & @error & ", @extended: " & @extended)
Else
MsgBox(64, "Info", "Address: " & $lpMemoryData[0] & @CRLF & "Value (HP): " & $lpMemoryData[1])
EndIf
_KDMemory_CloseHandle($phHandles)
EndIf
EndIf
|
|
|
08/06/2013, 22:40
|
#4
|
elite*gold: 68
Join Date: Feb 2011
Posts: 401
Received Thanks: 96
|
Croco das geht glaub auch nicht komt wieder "0",
KDeluxe funkt es nur bei 64bit weil ich habe 32bit windows XP , und ich kriege "Can't read memory! @error:15"
|
|
|
08/10/2013, 17:09
|
#5
|
elite*gold: 68
Join Date: Feb 2011
Posts: 401
Received Thanks: 96
|
Hier jetzt habe ich das wersucht aber wieder kein erfolg was mache ich falsch ?
Code:
#include <Pointer.au3>
$PID = ProcessExists("MultiClient.exe")
$MemOpen = _MemoryOpen($PID)
Global $Offset[3]
$Offset[0] = 0
$Offset[1] = Dec("48")
$Offset[2] = Dec("AC")
$StaticOffset = Dec("003E6948")
$BaseAddr = _MemoryGetBaseAddress($MemOpen, 1)
$Addr = "0x" & Hex($baseADDR + $StaticOffset)
$Value = _MemoryPointerRead($Addr, $MemOpen, $Offset)
while 1
Tooltip ($Value[1])
WEnd
Hier die offset und base oder sowas ein photo was mache ich falsch?
|
|
|
08/10/2013, 17:59
|
#6
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
|
Quote:
Originally Posted by blackout617
Croco das geht glaub auch nicht komt wieder "0",
KDeluxe funkt es nur bei 64bit weil ich habe 32bit windows XP , und ich kriege "Can't read memory! @error:15"
|
Nafensterlich funktioniert meine UDF auch mit 32 Bit Betriebssystemen. @error 15 sagt aus, dass die finale Adresse nicht gelesen werden konnte. Ursache dafür ist so gut wie immer die Verwendung von falschen Offsets. Evtl. sind sie einfach in der falschen Reihenfolge.
Quote:
Originally Posted by blackout617
Hier jetzt habe ich das wersucht aber wieder kein erfolg was mache ich falsch ?
Code:
#include <Pointer.au3>
$PID = ProcessExists("MultiClient.exe")
$MemOpen = _MemoryOpen($PID)
Global $Offset[3]
$Offset[0] = 0
$Offset[1] = Dec("48")
$Offset[2] = Dec("AC")
$StaticOffset = Dec("003E6948")
$BaseAddr = _MemoryGetBaseAddress($MemOpen, 1)
$Addr = "0x" & Hex($baseADDR + $StaticOffset)
$Value = _MemoryPointerRead($Addr, $MemOpen, $Offset)
while 1
Tooltip ($Value[1])
WEnd
Hier die offset und base oder sowas ein photo was mache ich falsch?
|
Und siehe da... Ich hatte recht, du verwendest "falsche" Offsets. Genau genommen ist die Reihenfolge falsch.
So sollte es funktionieren:
Code:
#AutoIt3Wrapper_UseX64=n
#RequireAdmin
#include "KDMemory.au3"
$szProcessName = "MultiClient.exe"
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId == 0 Then
MsgBox(48, "Error", "Process doesn't exists!")
Else
$phHandles = _KDMemory_OpenProcess($dwProcessId)
If @error Then
MsgBox(48, "Error", "Can't open " & $szProcessName & "! @error: " & @error)
Else
$lpBaseAddress = _KDMemory_GetModuleBaseAddress($phHandles, $szProcessName) + 0x003E6948 ; not recommended
If @error Then
MsgBox(48, "Error", "Can't get ModuleBaseAddress! @error: " & @error & ", @extended: " & @extended)
Else
Dim $pOffsets[2] = [0xAC, 0x48]
$lpMemoryData = _KDMemory_ReadProcessMemory($phHandles, $lpBaseAddress, 'DWORD', $pOffsets)
If @error Then
MsgBox(48, "Error", "Can't read memory! @error: " & @error & ", @extended: " & @extended)
Else
MsgBox(64, "Info", "Address: " & $lpMemoryData[0] & @CRLF & "Value: " & $lpMemoryData[1])
EndIf
EndIf
_KDMemory_CloseHandle($phHandles)
EndIf
EndIf
|
|
|
08/10/2013, 18:56
|
#7
|
elite*gold: 68
Join Date: Feb 2011
Posts: 401
Received Thanks: 96
|
Danke jetzt krieg ich aber: Can't get ModuleBaseAdress! @error:21,@extend:0
|
|
|
08/10/2013, 20:06
|
#8
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
|
Das kann mehrere Ursachen haben, ich möchte aber erst nicht darauf eingehen. "; not recommended" steht nicht ohne Grund in meinem Beispiel. Fast immer ist es eine unnötige Ressourcenverschwendung die zusätzliches Fehlerpotenzial entwickelt.
Probiere folgendes aus:
Code:
#AutoIt3Wrapper_UseX64=n
#RequireAdmin
#include "KDMemory.au3"
$szProcessName = "MultiClient.exe"
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId == 0 Then
MsgBox(48, "Error", "Process doesn't exists!")
Else
$phHandles = _KDMemory_OpenProcess($dwProcessId)
If @error Then
MsgBox(48, "Error", "Can't open " & $szProcessName & "! @error: " & @error)
Else
$lpBaseAddress = 0x0356DC90
Dim $pOffsets[2] = [0xAC, 0x48]
$lpMemoryData = _KDMemory_ReadProcessMemory($phHandles, $lpBaseAddress, 'DWORD', $pOffsets)
If @error Then
MsgBox(48, "Error", "Can't read memory! @error: " & @error & ", @extended: " & @extended)
Else
MsgBox(64, "Info", "Address: " & $lpMemoryData[0] & @CRLF & "Value: " & $lpMemoryData[1])
EndIf
_KDMemory_CloseHandle($phHandles)
EndIf
EndIf
|
|
|
08/10/2013, 20:09
|
#9
|
elite*gold: 68
Join Date: Feb 2011
Posts: 401
Received Thanks: 96
|
Quote:
Originally Posted by KDeluxe
Das kann mehrere Ursachen haben, ich möchte aber erst nicht darauf eingehen. "; not recommended" steht nicht ohne Grund in meinem Beispiel. Fast immer ist es eine unnötige Ressourcenverschwendung die zusätzliches Fehlerpotenzial entwickelt.
Probiere folgendes aus:
Code:
#AutoIt3Wrapper_UseX64=n
#RequireAdmin
#include "KDMemory.au3"
$szProcessName = "MultiClient.exe"
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId == 0 Then
MsgBox(48, "Error", "Process doesn't exists!")
Else
$phHandles = _KDMemory_OpenProcess($dwProcessId)
If @error Then
MsgBox(48, "Error", "Can't open " & $szProcessName & "! @error: " & @error)
Else
$lpBaseAddress = 0x0356DC90
Dim $pOffsets[2] = [0xAC, 0x48]
$lpMemoryData = _KDMemory_ReadProcessMemory($phHandles, $lpBaseAddress, 'DWORD', $pOffsets)
If @error Then
MsgBox(48, "Error", "Can't read memory! @error: " & @error & ", @extended: " & @extended)
Else
MsgBox(64, "Info", "Address: " & $lpMemoryData[0] & @CRLF & "Value: " & $lpMemoryData[1])
EndIf
_KDMemory_CloseHandle($phHandles)
EndIf
EndIf
|
@error 15
hatte es woher auch schon probiert :
$lpBaseAddress = 0x0356DC90
und
$lpBaseAddress = "0356DC90"
|
|
|
08/10/2013, 20:21
|
#10
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
|
Die Angabe als String kann nicht funktionieren. Den String müsstest du dann schon der Dec() Funktion übergeben. Da du den Wert aber direkt in Hexadezimalschreibweise angeben kannst rate ich dir davon ab.
Überprüfe mal, ob diese Adresse immer die richtige BaseAddress ist sich nie ändert. Interessant wäre in diesem Zusammenhang auch, ob folgendes funktioniert:
Code:
#AutoIt3Wrapper_UseX64=n
#RequireAdmin
#include <Pointer.au3>
$szProcessName = "MultiClient.exe"
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId == 0 Then
MsgBox(48, "Error", "Process doesn't exists!")
Else
$phHandles = _MemoryOpen($dwProcessId)
If @error Then
MsgBox(48, "Error", "Can't open " & $szProcessName & "! @error: " & @error)
Else
$lpBaseAddress = 0x0356DC90
Dim $pOffsets[3] = [0, 0xAC, 0x48]
$lpMemoryData = _MemoryPointerRead($lpBaseAddress, $phHandles, $pOffsets, 'DWORD')
If @error Then
MsgBox(48, "Error", "Can't read memory! @error: " & @error & ", @extended: " & @extended)
Else
MsgBox(64, "Info", "Address: " & $lpMemoryData[0] & @CRLF & "Value: " & $lpMemoryData[1])
EndIf
_MemoryClose($phHandles)
EndIf
EndIf
Wenn dieses Script funktioniert muss ich mir meine UDF noch mal anschauen, vielleicht habe ich tatsächlich eine fehlerhafte hochgeladen, wobei ich aktuell nicht davon ausgehe.
|
|
|
08/10/2013, 20:48
|
#11
|
elite*gold: 68
Join Date: Feb 2011
Posts: 401
Received Thanks: 96
|
Ich werde noch verrück es funk nicht  ( was für eine adressse komt bei msgbox (msgbox ist ja das gleiche ich habe consolewrite genutzt für copy/paste ergebnis)
ConsoleWrite("Address: " & $lpMemoryData[0] & @CRLF & "Value: " & $lpMemoryData[1])
Code:
Address: 0x000000000384C7A8
Value: 0
|
|
|
08/10/2013, 21:06
|
#12
|
elite*gold: 0
Join Date: Dec 2012
Posts: 448
Received Thanks: 278
|
Ist die Adresse 384C7A8 denn richtig?
|
|
|
08/10/2013, 21:16
|
#13
|
elite*gold: 68
Join Date: Feb 2011
Posts: 401
Received Thanks: 96
|
Nein,Das ist ja das ergebnis :/
|
|
|
08/10/2013, 21:41
|
#14
|
elite*gold: 64
Join Date: May 2011
Posts: 1,229
Received Thanks: 854
|
Lol^^, wieso ist dein ergebnis ein Hex?
Hast du es umgewandelt?
|
|
|
08/10/2013, 21:48
|
#15
|
elite*gold: 68
Join Date: Feb 2011
Posts: 401
Received Thanks: 96
|
Glaub nein also ich habe das hier benutzt und das ergebnis habe ich ja geschrieben
Code:
#AutoIt3Wrapper_UseX64=n
#include <Pointer.au3>
$szProcessName = "MultiClient.exe"
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId == 0 Then
MsgBox(48, "Error", "Process doesn't exists!")
Else
$phHandles = _MemoryOpen($dwProcessId)
If @error Then
MsgBox(48, "Error", "Can't open " & $szProcessName & "! @error: " & @error)
Else
$lpBaseAddress = 0x0356DC90
Dim $pOffsets[3] = [0, 0xAC, 0x48]
$lpMemoryData = _MemoryPointerRead($lpBaseAddress, $phHandles, $pOffsets, 'DWORD')
If @error Then
MsgBox(48, "Error", "Can't read memory! @error: " & @error & ", @extended: " & @extended)
Else
ConsoleWrite("Address: " & $lpMemoryData[0] & @CRLF & "Value: " & $lpMemoryData[1])
MsgBox(64, "Info", "Address: " & $lpMemoryData[0] & @CRLF & "Value: " & $lpMemoryData[1])
EndIf
_MemoryClose($phHandles)
EndIf
EndIf
Glaub nein also ich habe das hier benutzt und das ergebnis habe ich ja geschrieben
Code:
#AutoIt3Wrapper_UseX64=n
#include <Pointer.au3>
$szProcessName = "MultiClient.exe"
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId == 0 Then
MsgBox(48, "Error", "Process doesn't exists!")
Else
$phHandles = _MemoryOpen($dwProcessId)
If @error Then
MsgBox(48, "Error", "Can't open " & $szProcessName & "! @error: " & @error)
Else
$lpBaseAddress = 0x0356DC90
Dim $pOffsets[3] = [0, 0xAC, 0x48]
$lpMemoryData = _MemoryPointerRead($lpBaseAddress, $phHandles, $pOffsets, 'DWORD')
If @error Then
MsgBox(48, "Error", "Can't read memory! @error: " & @error & ", @extended: " & @extended)
Else
ConsoleWrite("Address: " & $lpMemoryData[0] & @CRLF & "Value: " & $lpMemoryData[1])
MsgBox(64, "Info", "Address: " & $lpMemoryData[0] & @CRLF & "Value: " & $lpMemoryData[1])
EndIf
_MemoryClose($phHandles)
EndIf
EndIf
|
|
|
 |
|
Similar Threads
|
Pointer+offsets lol
05/28/2013 - League of Legends - 11 Replies
Hallo,
Ich arbeite gerade an einem Tool für lol welches einem im Spiel helfen soll,
Auto timer etc items vorschlagen Fokus usw
Ich habe nur ein Problem es sind so viele Werte und bei manchen Pointen komme ich auf keinen grünen Zweig. Vor allem die respawn zeit
Kann mal wer die Base Pointer +offsets posten
Tjx im voraus :)
|
C++ Pointer mit Offsets?
05/22/2013 - C/C++ - 12 Replies
Hi.
Ich habe einen Pointer gefunden mit 5 Offsets.
Hier mal ein Bild:
http://img4.fotos-hochladen.net/uploads/cetcm2ox7 3i5.png
Mit Autoit habe ich es nicht geschafft, da die Value sich nie geändert hat.
Jetzt will ich es per DLL machen.
So sieht meine DLL bis jetzt aus:
|
Offsets/Pointer
04/14/2010 - World of Warcraft - 4 Replies
Huhu,
hat wer die Offsets/Pointer für WoW 3.3.3a ?
Wäre n1!
|
[Help] Pointer,Offsets,Etc.
05/29/2009 - Kal Online - 10 Replies
Heyjo,
Aaalso...
Ich hab mich vorher noch nie mit Artmoney befasst bzw. nur 1-2 mal für speedhack das wars aber auch schon.
Mir geht es jetzt um den Pointer, Offsets kram.
Wenn ich Pointer suchen möchte such ich erst mal die normale adresse...sagen wir jetzt von der X Coordinate
in meinem Fall jetzt:
085EBDA8
jetzt mach ich nen rechtsklick drauf --> Mehr... --> Suche.. --> Pointer zu dieser Adresse suchen:
0 Ergebnisse
Wenn ich Pointer ab Anfang des Speicherblocks suchen klicke, kriegt...
|
need help getting mob pointer and offsets
12/21/2008 - Silkroad Online - 1 Replies
well as the topic sais i wanna get the memory adresses to read mobdata like playerdata
so far i found the adress for mobhp in the memory
the adress changes with each mob so i've set a breakpoint in olly and got the offset 0x440
with that offset i got the pointer for that client
u can c that here:
http://silkroad-planet.de/Magic/mob_hp.jpg
the mob was a movia(54hp) and the pointer was 0x9CE4E6C
well now i'm able to get the data of that client for each mob i select...
|
All times are GMT +1. The time now is 08:44.
|
|