Die LIB besteht aus 3 Befehlen (StartCheck(),StopCheck() und ProcessCheck())
Die Procs überprüfen ob die Register zwischen StartCheck() und StopCheck() verändert wurden, dürfte also nur für LIB-Progger oder leute die ASM-Code benutzen interessant sein.
Eigentlich wollte ich mit dieser Lib zuerst nur eine Procedure überprüfen indem ich deren pointer übergebe. (CheckFunction(@Proc(),arg1,arg2,...))
Da aber @Procedure() zwar vom Syntax her vom Compiler akzeptiert wird, aber nicht das macht was es soll (nämlich den pointer zurück geben) funktionierte die ganze Sache nicht. (Ist kein Bug, hab Fred schon gefragt
Also kam ich paar Minuten später auf die Idee es mit den 3 Procs zu machen (Eigentlich braucht man nur StartCheck() und StopCheck(), aber ProcessCheck() vereinfacht das auswerten)
Download: http://www.deeem2031.de/CheckFunction.zip
Procs:
StartCheck()
*Result = StopCheck()
Result = ProcessCheck(flags.l)
Beispiel:
Code: Alles auswählen
DisableDebugger
ResetCPURegister()
ResetCPUFlags()
StartCheck()
InitNetwork()
*Result.CheckResult = StopCheck()
If ProcessCheck(#CheckFunction_Important) = 0
icon = 0 ; :)
Else
icon = 16 ; :(
EndIf
output.s = "---Register---"+#CRLF$
output + "Esp: "+Str(*Result\Esp)+#CRLF$
output + "Eax: "+Str(*Result\Eax)+#CRLF$
output + "Ebx: "+Str(*Result\Ebx)+#CRLF$
output + "Ecx: "+Str(*Result\Ecx)+#CRLF$
output + "Edx: "+Str(*Result\Edx)+#CRLF$
output + "Esi: "+Str(*Result\Esi)+#CRLF$
output + "Edi: "+Str(*Result\Edi)+#CRLF$
output + "Ebp: "+Str(*Result\Ebp)+#CRLF$
output + #CRLF$
output + "---Flags---"+#CRLF$
output + "CF: "+Str(*Result\flags&#CheckFunction_Flag_CarryFlag)+#CRLF$
output + "PF: "+Str(*Result\flags&#CheckFunction_Flag_ParityFlag)+#CRLF$
output + "AF: "+Str(*Result\flags&#CheckFunction_Flag_AuxiliaryFlag)+#CRLF$
output + "ZF: "+Str(*Result\flags&#CheckFunction_Flag_ZeroFlag)+#CRLF$
output + "SF: "+Str(*Result\flags&#CheckFunction_Flag_SignFlag)+#CRLF$
output + "TF: "+Str(*Result\flags&#CheckFunction_Flag_Trapflag)+#CRLF$
output + "IF: "+Str(*Result\flags&#CheckFunction_Flag_InterruptFlag)+#CRLF$
output + "DF: "+Str(*Result\flags&#CheckFunction_Flag_DirectionFlag)+#CRLF$
output + "OF: "+Str(*Result\flags&#CheckFunction_Flag_OverflowFlag)+#CRLF$
output + "IOPL: "+Str(*Result\flags&#CheckFunction_Flag_IOPrivilegeLevel)+#CRLF$
output + "NT: "+Str(*Result\flags&#CheckFunction_Flag_NestedTaskFlag)+#CRLF$
output + "RF: "+Str(*Result\flags&#CheckFunction_Flag_ResumeFlag)+#CRLF$
output + "VM: "+Str(*Result\flags&#CheckFunction_Flag_VirtualModeFlag)+#CRLF$
MessageRequester("Change",output,icon)Soll heißen wenn ProcessCheck() Null zurückgibt ist alles ok
Was man mit dem Rückgabewert von StopCheck() anfängt kann man dem Beispiel entnehmen. Die Werte sind die Differenzen zwischen Aufruf von StartCheck() und StopCheck(). Wobei Eax, Ecx und Edx sogut wie keine Rolle spielen.
Ansonsten ist nurnoch zu sagen das man StartCheck() und StopCheck() nicht als Parameter einer Procedure angeben darf, da die Werte dadurch verfälscht werden.


oder eine Geschmacksfrage