Pointer frozen mit Autoit möglich?

03/12/2011 18:35 auchegal#1
Hi,

ich hab mir ein Script gebastelt, mit dem ich den Wert einer Speicheradresse überschreibe.
In Cheatengine gibt es die Möglichkeit eine Adresse als "frozen" zu kennzeichnen, somit kann die nicht mehr geändert werden.
Ist sowas mit Autoit ohne Endlosschleife möglich?

Diese Funktion nutze ich, um den Wert der Speicheradresse zu ändern:
Code:
_MemoryPointerWrite($FinalAddress, $hMemory, $Offset, "1")
Allerdings wird der Wert von dem Programm dann nach gewissen Aktionen wieder umgeändert, das will ich verhindern.

Danke schonmal.
03/12/2011 18:48 omer36#2
AdlibRegister()
03/12/2011 21:48 PenGuin :O#3
Wenn du das Programm disassemblierst, wirst du an deiner gefunden andresse etwas finden was aussieht:

MOV EAX, DWORD PTR SS:[EBP+8]

oder ähnlich.

Das änderst du einfach zu MOV EAX, deinWert und es ist automatisch gefreezt.
03/13/2011 12:19 SCORNI#4
Tu memorywrite in eine schleife und lass alle 100 ms memorywrite mit dem gewünschten wert ausführen. So weit ich weiß tut cheatengine auch nix anderes. (Oder doch?)
03/13/2011 13:16 Imaginär#5
Code:
Dim $Schalter1 = 0

;Gui

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
			
		Case $Button1
			$Schalter1 = 1
		Case $Button2
			$Schalter1 = 0
	EndSwitch

If $Schalter1 = 1 Then
    _MemoryPointerWrite($FinalAddress, $hMemory, $Offset, "1")
EndIf

WEnd

Was hast du denn gegen Endlosschleifen? Funktioniert doch. :s
03/13/2011 13:28 omer36#6
was habt ihr alle mit euren schleifen o.O

AdlibRegister(_MemoryPointerWrite($FinalAddress, $hMemory, $Offset, "1"))

reicht völlig, es ruft diese funktion alle 250ms auf, kann mann als "frozen" bezeichnen...
03/13/2011 15:49 SCORNI#7
Ist im endefekt ja kein unterschied ob es adlibregister oder ne schleife ist o.O
03/13/2011 16:24 PenGuin :O#8
Quote:
Originally Posted by SCORNI View Post
Tu memorywrite in eine schleife und lass alle 100 ms memorywrite mit dem gewünschten wert ausführen. So weit ich weiß tut cheatengine auch nix anderes. (Oder doch?)
Quote:
Originally Posted by PenGuin :O View Post
Wenn du das Programm disassemblierst, wirst du an deiner gefunden andresse etwas finden was aussieht:

MOV EAX, DWORD PTR SS:[EBP+8]

oder ähnlich.

Das änderst du einfach zu MOV EAX, deinWert und es ist automatisch gefreezt.
.

Quote:
AdlibRegister(_MemoryPointerWrite($FinalAddress, $hMemory, $Offset, "1"))
Das wird so nicht gehen, du musst
_MemoryPointerWrite($FinalAddress, $hMemory, $Offset, "1"))
in eine Funktion packen ohne Parameter und die dann so aufrufen:

AdlibRegister("_Funktion")
03/13/2011 17:01 omer36#9
Quote:
Originally Posted by PenGuin :O View Post
.



Das wird so nicht gehen, du musst
_MemoryPointerWrite($FinalAddress, $hMemory, $Offset, "1"))
in eine Funktion packen ohne Parameter und die dann so aufrufen:

AdlibRegister("_Funktion")

doch doch funzt so auch, muss mann nciht in eine extra funktion packen
03/13/2011 18:01 lolkop#10
AdlibRegister führt ja auch alle x ms ein interrupt durch, indem es einfach nur execute mit dem gegebenen parameter ausführt =)

man könnte also auch genausogut eine oder mehrere funktionen mit parametern darüber laufen lassen =)

allerdings muss beachtet werden, das die jeweile laufzeit der funktion nicht die im parameter übergebene ausführungszeit überschreitet, da sonst die funktion während der eigenen laufzeit bereits neu getstartet werde würde
03/13/2011 18:15 PenGuin :O#11
Code:
AdlibRegister(_Console(), 20)

While Sleep(50)
WEnd

Func _Console()
	MsgBox(0, "", "Test")
EndFunc
Bei mir gehts nicht.
03/13/2011 21:18 lolkop#12
und jetzt denk mal über die laufzeit der msgbox nach, und in welchem intervall die aufgerufen werden soll

Edit:
wobei
Code:
AdlibRegister(ConsoleWrite('blah'),500)

While Sleep(50)
WEnd
auchnicht funktioniert... also anscheinend ist das ganze so doch nicht wirklich nutzbar sry für die falsche info :P
03/13/2011 21:31 PenGuin :O#13
Quote:
Originally Posted by lolkop View Post
und jetzt denk mal über die laufzeit der msgbox nach, und in welchem intervall die aufgerufen werden soll

Edit:
wobei
Code:
AdlibRegister(ConsoleWrite('blah'),500)

While Sleep(50)
WEnd
auchnicht funktioniert... also anscheinend ist das ganze so doch nicht wirklich nutzbar sry für die falsche info :P
Ups sry, ich hatte das auch mit ConsoleWrite getestet, ging auhc nicht, habs dann in ner MsgBox getan, damit das jeder sieht und außer Acht gelassen, dass man da ja auf OK drücken muss -.-'

Aber naja wie du selbst siehst, geht es nicht ;)
03/14/2011 01:46 auchegal#14
AdlibRegister funktioniert wunderbar, vielen Dank =)

Das Problem bei meinen Endlosschleifen war, dass die CPU Auslastung zu hoch war.
Außerdem macht dann das Programm nichts anderes mehr ^^