Re: Variablen auf Änderungen überwachen
Verfasst: 13.03.2018 14:46
Ich schließe mich natürlich allen Vorrednern an, aber um trotzdem mal eine "Lösung" festzuhalten - hier ein schnelles Snippet:
An sich funktioniert es, allerdings hat es mehrere Defizite.
1) die Abgleich-Vars sind in einer globalen Liste.
2) ein echter Hacker kann es trotzdem umgehen
3) Die Performance ist Müll ... (du wirst nicht nur eine Variable haben)
4) Dein Hauptaugenmerk sollte erstmal darauf liegen alle Funktionen fertig zu haben.
Mfg,
Kirito
Code: Alles auswählen
Enumeration
#Change_NotFound
#Change_False
#Change_True
EndEnumeration
Global NewMap Vars.l()
Global NewMap Keys.s()
Procedure _checkChange(*Var, reset=0)
If Not *Var Or Not FindMapElement(Vars(),Str(*Var)) Or Not FindMapElement(Keys(),Str(*Var))
ProcedureReturn #Change_NotFound
EndIf
cache = PeekL(*Var)
UseMD5Fingerprint()
If cache <> Vars(Str(*Var)) Or Keys(Str(*Var)) <> StringFingerprint(Str(cache), #PB_Cipher_MD5)
If reset = 1
PokeL(*Var, Vars(Str(*Var)))
EndIf
ProcedureReturn #Change_True
EndIf
ProcedureReturn #Change_False
EndProcedure
Procedure _makeChange(*Var, Value)
If Not *Var : ProcedureReturn #Change_NotFound : EndIf
PokeL(*Var, Value)
UseMD5Fingerprint()
Vars(Str(*Var)) = Value
Keys(Str(*Var)) = StringFingerprint(Str(Value), #PB_Cipher_MD5)
ProcedureReturn #Change_True
EndProcedure
OpenConsole("Now let's have some fun!")
Define x.l
PrintN("0 = Not Found")
PrintN("1 = Var has not changed")
PrintN("2 = Var has changed!")
PrintN("")
Print("Set x = 20 --- Returned ") : PrintN(Str(_makeChange(@x, 20)))
Print("Has x changed? Returned ") : PrintN(Str(_checkChange(@x)))
PrintN("")
x = 30 ;Let's asume this is by access from outside
PrintN("[Var got changed to 30]")
Print("Has x changed? Returned ") : PrintN(Str(_checkChange(@x,1)))
PrintN("[Used auto-reset as Param]")
Print("Has x changed? Returned ") : PrintN(Str(_checkChange(@x)))
PrintN("X = "+Str(x))
PrintN("")
PrintN("==============================")
Input()
1) die Abgleich-Vars sind in einer globalen Liste.
2) ein echter Hacker kann es trotzdem umgehen
3) Die Performance ist Müll ... (du wirst nicht nur eine Variable haben)
4) Dein Hauptaugenmerk sollte erstmal darauf liegen alle Funktionen fertig zu haben.
Mfg,
Kirito